DEFINITION Multidistribution_Non_660004615 0
DEFINITION DISTRIBUTION_SPECIALE_660004615 0
DEFINITION DISTRIBUTION_INCONNUE_660004615 1
DEFINITION DISTRIBUTION_AIG_IMSI_660004615 2
DEFINITION EFFICACE_660004615 1
DEFINITION type_660004615 0x90
DEFINITION C_Article_660004615 "Tgourou"
DEFINITION C_Tdpv_660004615 "Tdpvgsm"
DEFINITION TRAI_KO_660004615 -1
DEFINITION TABLEIPV4_660004615 "IP_SGSN_V4"
DEFINITION TABLEIPV6_660004615 "IP_SGSN_V6"
REGISTRE ENTIER Nb_redist_660004615
REGISTRE ENTIER date_fin_660004615
REGISTRE ENTIER ICAR_ABS_660004615
REGISTRE ENTIER erreur_660004615
REGISTRE ENTIER date_audit_660004615
REGISTRE ENTIER code_errone_660004615
REGISTRE ENTIER Cause_660004615
REGISTRE ENTIER ChargingChar_660004615
REGISTRE ENTIER longueur_660004615
REGISTRE ENTIER RecordType_660004615
REGISTRE ENTIER Coverage_660004615
REGISTRE POINTEUR pt_SGTQS_660004615
REGISTRE POINTEUR pt_BUFFER_660004615
REGISTRE POINTEUR pt_idemet_660004615
REGISTRE POINTEUR pt_valeur_660004615
REGISTRE POINTEUR pt_cle_660004615
######################################################################
# Tgourou_dis.src
#	HISTORIQUE
# creation 21/08/2009
# 09/10/09 DECI : QC 472 harmonisation champs T4t20.10.1 et T4t46.1
# 22/11/2010 - JLG - G3R1lot4 Verification/Correction des variables (constantes, entiers, pointeurs)
# 24/2/2012 PKH	- G3R6 Aiguillage des CRA usage level Gourou
# 29/02/2012 - JLG -G3R6 QC1005 modif alarme retour aiguillage
# 21/03/2012 G3R6, QC1018 : Les DC Gourou doivent etre soumis aux criteres de distribution speciaux
# 02/07/2014 - JLG -G5R1 QC1405, champ eec du DPV si g_ieec > 500
#####################################################################




####################

############################################################################
# Allocation memoire
############################################################################
pt_SGTQS_660004615 = "pt_SGTQS01234567890"
pt_BUFFER_660004615 = "pt_BUFFER01234567890123456789"
pt_idemet_660004615 = "pt_idemet012345678901234567890"
pt_valeur_660004615 = "pt_valeur012345678901234567890567890123456"
# anomalie longueur, pt_cle = "pt_cle012345678901234567890"
pt_cle_660004615 = "pt_cle01234567890123456789001234"

SI (i_LireRedistCpt() == 0)
ALORS
	erreur_660004615 = i_add_opt( "E_Redistri2" )
FINSI
erreur_660004615 = i_set_attr_val_n( $E_Redistri2::EnvoiRedis, 0)

############################################################################
# Initialisation
############################################################################
i_strcpy(pt_cle_660004615,"")
i_strcpy(pt_SGTQS_660004615,"")
i_strcpy(pt_BUFFER_660004615,"")
i_strcpy(pt_idemet_660004615,"")

############################################################################
# Variables fonctionnelles
############################################################################
########### Date_Audit
date_audit_660004615=i_date_audit()
#trace1("[Tgourou_dist] date_audit=%x",date_audit)

ICAR_ABS_660004615 = i_get_art_field(g_iartin, $Tgourou::ddebut)

############################################################################
# Variables diverses
############################################################################
RecordType_660004615 = i_get_art_field(g_iartin, $Tgourou::RecordType)
Coverage_660004615 = i_get_art_field(g_iartin, $Tgourou::Coverage)

###########################################################################
# Duplication Tdpv33 (g_iartout)
############################################################################
#Duplication article d entree vers DPV TLV

	SI (i_dup_art_tab( g_iartin, g_iartout, C_Tdpv_660004615))
	ALORS
#		trace("ERREUR de duplication")
		code_errone_660004615 = 0xA0D0
		code_errone_660004615 = code_errone_660004615 + EFFICACE_660004615
		erreur_660004615 = i_PlvMessEmettre(6303,2,g_iartin,"",3,code_errone_660004615,C_Tdpv_660004615,0)
		SAUT DISTRI_ERR
	FINSI
erreur_660004615 = i_cree_art("Conv_URS",g_iartout10)
##################################################################################
# QC 472 : En fonction du type, stockage et mise au format du champ qui sera utile pour :
# T4t20.10.1 
# T4t46.1
SI RecordType_660004615 == 0x11
ALORS
	g_iartout10.totVolxx[0] = g_iartin.Usage[2]
	g_iartout10.totVolxx[1] = g_iartin.Usage[3]
	g_iartout10.totVolxx[2] = g_iartin.Usage[4]
	g_iartout10.totVolxx[3] = g_iartin.Usage[5]
	g_iartout10.totVolxx[4] = g_iartin.Usage[6]
	g_iartout10.totVolxx[5] = g_iartin.Usage[7]
SINON
	g_iartout10.totVolxx[0] = 0
	g_iartout10.totVolxx[1] = 0
	g_iartout10.totVolxx[2] = g_iartin.ServIPVolUsage[0]
	g_iartout10.totVolxx[3] = g_iartin.ServIPVolUsage[1]
	g_iartout10.totVolxx[4] = g_iartin.ServIPVolUsage[2]
	g_iartout10.totVolxx[5] = g_iartin.ServIPVolUsage[3]
FINSI

#############################
# REDISTRIBUTION
#############################
#Compteur de redistrib
##################################################################################
# la provenance de l'article 
# Nb_redist : nb de passage en redistribution (lecture de l'enveloppe obligatoire)
##################################################################################
Nb_redist_660004615 = -1
Nb_redist_660004615 = i_LireRedistCpt()

########################################################
# Cpt applicatif CPT_RDT=1509 (REDISTRIBUTION)
########################################################
# FE_0028 comptabilisation des CRAs issus de la redistribution
	date_fin_660004615=i_get_art_field(g_iartin,$Tgourou::dfin)
	erreur_660004615= i_incr_redist_dist_660004265(date_fin_660004615)

########################## Modif des champs #############################
############ T3t1.3	idemet :MSET :FF:9 (defaut table dup)
# A venir : MAJ specification 
i_strcpy (pt_SGTQS_660004615, i_LireEECSGTQS(g_ieec))
erreur_660004615 = i_format_str2(pt_BUFFER_660004615,"%s%s","AX_IDEMET_",pt_SGTQS_660004615)
i_strcpy(pt_idemet_660004615, i_get_tab_field("VariableContexte", ICAR_ABS_660004615, pt_BUFFER_660004615))
SI (i_strcmp(pt_idemet_660004615,g_inull)) != 0 
ALORS
	erreur_660004615 = affectation_tab_660004265(g_iartout,$Tdpvgsm::idemet,pt_idemet_660004615)
SINON
	g_iartout.idemet[0] = 0x3
	g_iartout.idemet[1] = 0x3
	g_iartout.idemet[2] = 0x0
	g_iartout.idemet[3] = 0x2
	g_iartout.idemet[4] = 0x6
	g_iartout.idemet[5] = 0x0
	g_iartout.idemet[6] = 0x0
	g_iartout.idemet[7] = 0x0
	g_iartout.idemet[8] = 0x0
	g_iartout.idemet[9] = 0x0
	g_iartout.idemet[10] = 0x0
FINSI

############ V3t1.4 IMSI
#trace("[Tgourou_dis] IMSI")
SI i_valid_field_n(g_iartin, $Tgourou::IMSI)
ALORS
	erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout, $Tgourou::IMSI, $Tdpvgsm::IMSI)
SINON
	g_iartout.IMSI[15]= 0xF
FINSI

############ V3T1.13 indeff 
SI i_valid_field_n(g_iartin, $Tgourou::Cause)
ALORS
	Cause_660004615 = i_get_art_field(g_iartin, $Tgourou::Cause)
	erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::indeff, 1)
SINON
	erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::indeff, 0)
FINSI

############ V3T1.14 tterm 
SI Cause_660004615 == 0xFF
ALORS
	erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::tterm, 0xFF)
SINON
	erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::tterm, 0x10)
FINSI	

############ V3T1.17 chgcar 
SI i_valid_field_n(g_iartin, $Tgourou::ChargingChar)
ALORS
	ChargingChar_660004615 = i_get_art_field(g_iartin, $Tgourou::ChargingChar)
	erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::chgcar, ChargingChar_660004615)
SINON
	erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::chgcar, 0xFFFF)
FINSI

############ V3t3 local 
longueur_660004615 = 0
SI i_valid_field_n(g_iartin, $Tgourou::PLMNId)
ALORS
	erreur_660004615 = i_ajoutChamp(g_iartout, "T3t3", "local", 0x01)
	longueur_660004615 = i_get_art_field(g_iartin, $Tgourou::PLMNId - 1) * 8
	erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout, $Tgourou::PLMNId, $Tdpvgsm::local)
	SAUT FIN_LOCAL
FINSI

SI i_valid_field_n(g_iartin, $Tgourou::SGSNADIPV4)
ALORS
		erreur_660004615 = i_get_art_str(g_iartin, $Tgourou::SGSNADIPV4, pt_cle_660004615)
		erreur_660004615 = RechercheMCCMNC_660004265(pt_cle_660004615, TABLEIPV4_660004615, ICAR_ABS_660004615, pt_valeur_660004615)
		SI(i_strcmp(pt_valeur_660004615,g_inull))
		ALORS
			erreur_660004615 = i_ajoutChamp(g_iartout, "T3t3", "local", 0x01)
			erreur_660004615 = affectation_tab_660004265(g_iartout,$Tdpvgsm::local,pt_valeur_660004615)
			longueur_660004615 = i_strlen(pt_valeur_660004615) * 4
		FINSI
		SAUT FIN_LOCAL
FINSI
			
SI i_valid_field_n(g_iartin, $Tgourou::SGSNADIPV6)
ALORS
		erreur_660004615 = i_get_art_str(g_iartin, $Tgourou::SGSNADIPV6, pt_cle_660004615)
		erreur_660004615 = RechercheMCCMNC_660004265(pt_cle_660004615, TABLEIPV6_660004615, ICAR_ABS_660004615, pt_valeur_660004615)
		SI(i_strcmp(pt_valeur_660004615,g_inull))
		ALORS
			erreur_660004615 = i_ajoutChamp(g_iartout, "T3t3", "local", 0x01)
			erreur_660004615 = affectation_tab_660004265(g_iartout,$Tdpvgsm::local,pt_valeur_660004615)
			longueur_660004615 = i_strlen(pt_valeur_660004615) * 4
		FINSI
		SAUT FIN_LOCAL
FINSI		

POINT FIN_LOCAL
SI  longueur_660004615 > 0
ALORS
	erreur_660004615 = i_resize_tlv(g_iartout, "T3t3", "local", longueur_660004615)
FINSI

############ V3t5 IMEI 
longueur_660004615 = 0
SI i_valid_field_n(g_iartin, $Tgourou::IMEI)
ALORS
	erreur_660004615 = i_ajoutChamp(g_iartout, "T3t5", "IMEI", 0x01)
	longueur_660004615 = i_get_art_field(g_iartin, $Tgourou::IMEI - 1)
	erreur_660004615 = i_resize_tlv(g_iartout, "T3t5", "IMEI", longueur_660004615 * 8)
	erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout, $Tgourou::IMEI, $Tdpvgsm::IMEI)
FINSI

############ V4t20.2 accPointName3
longueur_660004615 = i_get_art_field(g_iartin, $Tgourou::ServiceId - 1)
erreur_660004615 = i_resize_tlv(g_iartout, "T4t20.2", "accPointName3", longueur_660004615 )
erreur_660004615 = i_resize_tlv(g_iartout10, "T2_APN", "APNA", longueur_660004615 )
erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout10, $Tgourou::ServiceId, $Conv_URS::APNA)
erreur_660004615 = i_dup_chp_1val(g_iartout10, g_iartout, $Conv_URS::APNH, $Tdpvgsm::accPointName3)

############ V4t20.7 RecEntId1
SI i_valid_field_n(g_iartin, $Tgourou::GGSNADIPV4)
ALORS
	erreur_660004615 = i_ajoutChamp(g_iartout, "T4t20.7", "RecEntId1", 0x01)
	erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout, $Tgourou::GGSNADIPV4, $Tdpvgsm::RecEntId1)
SINON
	SI i_valid_field_n(g_iartin, $Tgourou::GGSNADIPV6)
	ALORS
		erreur_660004615 = i_ajoutChamp(g_iartout, "T4t20.7", "RecEntId1", 0x01)
		erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout, $Tgourou::GGSNADIPV6, $Tdpvgsm::RecEntId1)
	FINSI
FINSI

############ V4t20.8 RecEntId2
SI i_valid_field_n(g_iartin, $Tgourou::SGSNADIPV4)
ALORS
	erreur_660004615 = i_ajoutChamp(g_iartout, "T4t20.8", "RecEntId2", 0x01)
	erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout, $Tgourou::SGSNADIPV4, $Tdpvgsm::RecEntId2)
SINON
	SI i_valid_field_n(g_iartin, $Tgourou::SGSNADIPV6)
	ALORS
		erreur_660004615 = i_ajoutChamp(g_iartout, "T4t20.8", "RecEntId2", 0x01)
		erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout, $Tgourou::SGSNADIPV6, $Tdpvgsm::RecEntId2)
	FINSI
FINSI

############ V4t20.10 totVolOut
erreur_660004615 = i_dup_chp_1val(g_iartout10, g_iartout, $Conv_URS::totVolxx, $Tdpvgsm::totVolOut)

############ V4t30.1 timeInCE
erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::timeInCE, date_audit_660004615)

############ V4t30.2 eec
# QC1405
SI (g_ieec > 500)
ALORS
  erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::eec, g_ieec - 500)
SINON
  erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::eec, g_ieec)
FINSI
#/QC1405

############ V3t37 CSDaddInfo
SI (Coverage_660004615 == 0x01)
ALORS
	erreur_660004615 = i_ajoutChamp(g_iartout, "T3t37", "CSDaddInfo", 0x01)	
	erreur_660004615 = i_set_art_field(g_iartout, $Tdpvgsm::CSDaddInfo, 0x080400)
FINSI


#G3R6 Aiguillage CRA usage level GOUROU
##################V4t44.2
SI (RecordType_660004615 == 0x11 || RecordType_660004615 == 0x40)
ALORS
	erreur_660004615 = i_ajoutChamp(g_iartout, "T4t44.2", "transactionType", 0x01)	
	erreur_660004615 = i_set_art_fieldtab(g_iartout, $Tdpvgsm::transactionType, 0, 0)
	erreur_660004615 = i_set_art_fieldtab(g_iartout, $Tdpvgsm::transactionType, 1, 0)
	erreur_660004615 = i_set_art_fieldtab(g_iartout, $Tdpvgsm::transactionType, 2, 0)
	erreur_660004615 = i_set_art_fieldtab(g_iartout, $Tdpvgsm::transactionType, 3, 0)
	

	SI RecordType_660004615 == 0x40
	ALORS
		erreur_660004615 = i_set_art_fieldtab (g_iartout, $Tdpvgsm::transactionType,3,2)
	FINSI
FINSI

############ T4t46.1 TAEvolume
erreur_660004615 = i_dup_chp_1val(g_iartout10, g_iartout, $Conv_URS::totVolxx, $Tdpvgsm::TAEvolume)


############ V3t51 servPlatRoaInt 
longueur_660004615 = 0
SI i_valid_field_n(g_iartin, $Tgourou::PLMNId)
ALORS
	erreur_660004615 = i_ajoutChamp(g_iartout, "T3t51", "servPlatRoaInf", 0x01)
	erreur_660004615 = i_dup_chp_1val(g_iartin, g_iartout, $Tgourou::PLMNId, $Tdpvgsm::servPlatRoaInf)
	longueur_660004615 = i_get_art_field(g_iartin, $Tgourou::PLMNId - 1) * 8
	SAUT T3T51
FINSI

SI i_valid_field_n(g_iartin, $Tgourou::SGSNADIPV4)
ALORS
		erreur_660004615 = i_get_art_str(g_iartin, $Tgourou::SGSNADIPV4, pt_cle_660004615)
		erreur_660004615 = RechercheMCCMNC_660004265(pt_cle_660004615, TABLEIPV4_660004615, ICAR_ABS_660004615, pt_valeur_660004615)
		SI(i_strcmp(pt_valeur_660004615,g_inull))
		ALORS
			erreur_660004615 = i_ajoutChamp(g_iartout, "T3t51", "servPlatRoaInf", 0x01)
			erreur_660004615 = affectation_tab_660004265(g_iartout,$Tdpvgsm::servPlatRoaInf,pt_valeur_660004615)
			longueur_660004615 = i_strlen(pt_valeur_660004615) * 4
		FINSI
		SAUT T3T51
FINSI
			
SI i_valid_field_n(g_iartin, $Tgourou::SGSNADIPV6)
ALORS
		erreur_660004615 = i_get_art_str(g_iartin, $Tgourou::SGSNADIPV6, pt_cle_660004615)
		erreur_660004615 = RechercheMCCMNC_660004265(pt_cle_660004615, TABLEIPV6_660004615, ICAR_ABS_660004615, pt_valeur_660004615)
		SI(i_strcmp(pt_valeur_660004615,g_inull))
		ALORS
			erreur_660004615 = i_ajoutChamp(g_iartout, "T3t51", "servPlatRoaInf", 0x01)
			erreur_660004615 = affectation_tab_660004265(g_iartout,$Tdpvgsm::servPlatRoaInf,pt_valeur_660004615)
			longueur_660004615 = i_strlen(pt_valeur_660004615) * 4
		FINSI
		SAUT T3T51
FINSI		

POINT T3T51
SI  longueur_660004615 > 0
ALORS
	erreur_660004615 = i_resize_tlv(g_iartout, "T3t51", "servPlatRoaInf", longueur_660004615)
FINSI

#######################################
# Appel fonction distribution
#######################################
#QC1018
erreur_660004615 = aiguillage2_660004590(g_iartin, g_iartout, DISTRIBUTION_INCONNUE_660004615, Multidistribution_Non_660004615)
SI (erreur_660004615 == TRAI_KO_660004615)
ALORS
	trace("<<<__LINE__<<<__FILE__<<< Erreur retour fonction aiguillage2")
#	code_errone = 0xA0B0
#	code_errone = code_errone + EFFICACE
#	erreur = i_PlvMessEmettre(7500,2,g_iartin,"",3,code_errone,C_Article,type)
	SAUT DISTRI_ERR
FINSI

RETOUR TRAIT_OK

#####################################################################
# POINT de branchement : stockage PT_ERRONE
#	       correspond au cas d'erreur syntaxiques et semantiques
#####################################################################

POINT DISTRI_ERR

erreur_660004615 = i_make_art_rej(g_iartin, g_iartout, code_errone_660004615)
erreur_660004615 = i_stocke_art(g_iartout, 0, PT_ERRONE, 0)

RETOUR TRAIT_OK
#---------------------------------------FIN Tgourou_dis.src-------------------
