Académique Documents
Professionnel Documents
Culture Documents
±
±
±±
°ǣ
±
ǯ
ǯ
͵ǤͶ
̵
̵ǯ
±±ͳ±
ʹͲͳʹǣ
±
±ǣ ǡÁ
±
ǣ ǡ
±ǣ ǡÁ
±
ǣ
±±ǡÁ
±
ǡ
ǡ
̵
ǣ
±±
±ǯ
±
±
±±
°ǣ
±
ǯ
ǯ
͵ǤͶ
̵
̵ǯ
±±ͳ±
ʹͲͳʹǣ
±
±ǣ ǡÁ
±
ǣ ǡ
±ǣ ǡÁ
±
ǣ
±±ǡÁ
±
ǡ
ǡ
̵
ǣ
±±
Ǽǡ ǡ
ǯ
ǯǽǤ
(Proverbes 2 : 10)
4
Nous exprimons également toute notre gratitude aux membres du jury, notamment,
Dr RANARIJAONA Jean Désiré, M. RAMELINA Lala Arimonjy et M.
ANDRIAMANALINA William, qui ont su apprécier ce travail.
La pertinence de vos critiques et suggestions nous a permis de finaliser convenablement
notre mémoire.
C’est avec un grand plaisir que nous adressons nos sincères remerciements à
l’égard de nos encadreurs pédagogique et professionnel : Dr ANDRIAMANOHISOA
Hery Zo et M. RABEKORIANA Rado, qui n’ont ménagé aucun effort pour la bonne
réussite de ce travail.
Nous tenons également à remercier toute l’équipe d’Orange Madagascar pour leur
accueil.
Nous ne terminerons pas sans avoir exprimé nos remerciements envers toutes les
personnes qui, de près ou de loin, et sous quelle forme que ce soit, ont apporté leur aide
inestimable et qui nous ont permis d’atteindre nos objectifs.
5
6
7
8
9
OSS: Operation Sub System
10
Dans cette optique, ce travail de fin d’études se base sur la création d’une API pour
permettre à des applications ou entités externes au réseau mobile d’échanger des
messages courts, en implémentant le protocole SMPP.
L’élaboration de cette API va ainsi permettre le développement de différentes
applications pour l’envoi et la réception d’un SMS en utilisant la nouvelle bibliothèque
11
java.nio. Cette dernière est intéressante dans la mesure où elle offre des méthodes
beaucoup plus efficace et rapide par rapport à l’ancienne entrée/sortie java.io.
Le défi est de produire un outil fiable pour la création de ce type d’application étant
donné que très peu, voire aucune publication n’aborde à ce jour ce sujet.
Ce qui amène à l’élaboration du présent travail qui sera présentée en trois (04)
grands chapitres :
• Le deuxième sera consacré aux généralités sur le réseau GSM avec un aperçu de
l’historique du service de message court ;
12
ǣ
ǡ
ǡ
ͳǤͳǤ
Des études et des analyses des différentes techniques d’envoi de SMS qui suit la
spécification définie par le protocole SMPP ont été ainsi effectuées. Ces études se sont
surtout focalisées sur les techniques de mise en œuvre du projet auxquelles l’utilisation
nécessite moins de financement, tout en considérant toutefois la facilité de réutilisation.
ͳǤʹǤ
Le projet étudié consiste à créer une API basée sur le protocole SMPP. L’API est
un outil qui va permettre au programmeur de créer des applications basées sur l’échange
de SMS. L’application sera capable de communiquer avec des serveurs de message court
(SMSC) : d’envoyer et de recevoir des SMS selon leur choix.
Les objectifs spécifiques du présent travail sont basés sur les points suivants :
• Création de tous les PDU qui fera l’objet de base de l’échange lors d’une
session SMPP décrit dans le protocole SMPP 3.4 ;
13
• Conception et programmation des modules pour assurer la transmission de ces
PDU à travers le réseau tout en considérant la connexion physique TCP/IP ;
ͳǤͶǤ
ͳǤͷǤ
Les étapes suivies pour la réalisation de ce travail ont été les suivantes :
14
Cette partie a pour but d’étudier de près quelques exemples de simulateurs,
notamment Kannel, SmscLogica, SmppSim, OpenSmpp, pour mieux
comprendre le fonctionnement de l’envoi d’un SMS par l’intermédiaire d’une
passerelle SMS.
Il est toutefois important de noter que l’étude s’est plus focalisée sur Kannel et
SMSClogica qui sont les produits utilisés par la société Orange Madagascar.
• Le routage des messages doit toujours passer par un nœud de Kannel. Ainsi,
pour pouvoir effectuer plusieurs envois, il est toujours nécessaire d’avoir à
disposition plusieurs nœuds, même si cela pourrait avoir des répercussions sur
la rapidité et la fiabilité du service ;
15
Bref, l’objectif de ce travail est de trouver une solution afin de pallier aux différents
problèmes suscités ; de gérer le Queuing et de diminuer les nœuds ; et si possible, éviter
d’utiliser Kannel afin de mieux gérer le flux de communication.
16
ǣ
Le GSM possède une meilleure ressource grâce à ses trois bandes de fréquence 900
MHz, 1800 MHz pour la norme européenne et 1900 MHz pour la norme américaine et
canadienne. Grâce à l’évolution de la technologie, de nos jours, le GSM autorise la
transmission des données numériques de faible volume comme le SMS et des messages
multimédias MMS.
17
et d’enregistreur de localisation nominal (HLR). Ce système comprend
l'ensemble des fonctions nécessaires à l'établissement des appels et à la
mobilité.
ʹǤʹǤͳǤ Ǧ°
• Le MS : la station mobile
• Le BTS : la station de base
• Le BSC : le contrôleur de station de base
Ǥ ȋȌ
18
L'identification d'un utilisateur est réalisée par un numéro unique IMSI différent du
numéro de téléphone connu de l'utilisateur MSISDN, tous deux étant incrustés dans la
carte SIM.
Ǥ
Le système de radiotéléphonie mobile GSM utilise les ondes radio électriques pour
assurer la liaison entre le terminal et le réseau téléphonique. Cette liaison radio doit être
de bonne qualité, ce qui demande la mise en place d’un ensemble de station de base
(BTS). C’est l’équipement central d’un site GSM. Elle assure la transmission radio, gère
la modulation et la démodulation ; et effectue le codage et correction d’erreur. Le BTS
implémente l’interface de communication air avec tous les MS activés sous l’espace de
couverture. Il est formé par un ensemble d’émetteurs récepteurs câblés entre eux et qui
est connecté aux antennes. En d’autre terme, c'est la station de base qui fait le relais entre
le mobile et le sous-système réseau.
Comme le multiplexage temporel est limité à huit intervalles de temps, une station
de base peut gérer tout au plus huit connexions simultanées par cellule. Elle réalise les
fonctions de la couche physique et de la couche liaison de données. Dans le langage
commun, cet ensemble est aussi appelée TRx/TRe.
Son premier rôle est de gérer les ressources radio. Lors d’une connexion, il réalise
une première concentration de circuit vers le MSC.
Dans ce cas, il se comporte comme un concentrateur de circuit qui commute et
transfert les données tout en prenant compte des mesures effectuées par les BTS afin de
pouvoir réguler la puissance du mobile et celle de la station de base.
19
Le BTS décide de l’exécution du Handover, c’est-à-dire des transferts
intercellulaires et transmet les informations sur la nouvelle localisation de l’abonné au
registre de location des visiteurs ou VLR. En effet, le contrôleur de station de base est
l’organe intelligent du sous-système radio.
ʹǤʹǤʹǤ Ǧ°±
Ǥ
Dans le réseau GSM, il peut y avoir un ou plusieurs MSC qui couvre une certaine
zone géographique et de base de données techniques. Son rôle est de vérifier les
autorisations de chaque demande et de savoir où il doit-être envoyé avant de les déléguer
au SMSC dans le cas d’un envoi de SMS par exemple.
20
En effet, le MSC opère les mises à jour des différentes bases de l’enregistreur de
localisation des visiteurs (VLR), de l’enregistreur de localisation nominale (HLR) ;
alloue les fréquences et registre la localisation des abonnés visiteurs.
Ǥ ǯ ȋȌ
Dans un réseau GSM, il existe au moins un HLR qui dispose d’un accès rapide
pour garantir un temps de connexion aussi court que possible.
Ǥ ǯ ȋȌ
1. La carte SIM qui interdit l’accès au réseau à une utilisation non enregistrée ;
2. Le chiffrement de la communication qui empêche l’écoute de celle-ci ;
3. La protection de l’identité de l’abonné.
21
Ǥ ǯ
ʹǤʹǤ͵Ǥ Ǧ°ǯ
22
hŵ
ďŝƐ
Légende :
ʹǤ͵Ǥ
ȋȌ
Le service SMS requiert une plateforme appelée SMSC qui est connecté à un
Switch par le biais du protocole SS7. Le SMSC est un serveur qui utilise le protocole
GSM pour communiquer avec les MSC et les HLR dans le réseau mobile. Son
identification dans le réseau se fait par le numéro de téléphone afin que le MSC puisse lui
transmettre le message à envoyer.
23
En effet, le SMSC est une partie du réseau de télécommunication GSM qui permet
la gestion de transfert de message court SMS. il permet également à des entités
extérieures ESME de s’y intégrer via Internet. Autrement dit, c’est une plateforme
d’enregistrement et de transfert de message court qui assure le stockage et le trafic des
SMS sur le réseau GSM. Le SMSC définit la date de validité des messages courts dans
une base de données qui peut être de type MySQL, Informix ou autre.
En réalité, quand un SMS est envoyé par un abonné vers un autre, le téléphone
transmet d’abord le message vers le SMSC qui se charge de le stocker, puis de le délivrer
quand le terminal de destination est présent sur le réseau. Dans ce cas, le SMSC
fonctionne en mode store and forward.
Pour certains cas, comme dans l’application OTA, le SMSC joue le rôle d’une
passerelle de communication entre le réseau IP et le réseau mobile. Afin de pouvoir
envoyer des SMS vers des numéros de destination MSISDN, un serveur peut accéder au
SMSC grâce à une connexion internet TCP.
Le SMSC possède une variété de protocole permettant aux entités non mobile
d’envoyer des messages aux entités mobiles : le protocole SMTP et le protocole HTTP
pour, respectivement, l’échange de courrier électronique et l’Internet ; le protocole
SMPP, EMI SEMA ou OIS pour les applications externes de message cours ESME. Ces
protocoles utilisent le protocole TCP/IP ou X25 comme porteur.
Le SMSC peut donc être relié à des passerelles d’accès parmi lesquelles celles des
éditeurs de services ESME et les systèmes d’opération, maintenance et d’administration
qui sont définis ci-après.
• Les passerelles d'accès au système d’éditeur de service ESME qui permet aux
entités extérieures non mobiles de se connecter avec le SMSC ;
24
• Les systèmes d'OAM qui aident les opérateurs à lancer et à configurer le
SMSC en service dans un réseau ;
• Le système prépayé.
A noter que les interfaces ESME sont des applications externes non mobiles
qui peuvent se connecter avec le SMSC.
• Une interface réseau qui est la partie matérielle et la seconde interface qui est
la partie logicielle de l’équipement ;
La figure suivante présente les différents éléments traversés par le SMS lors d’un
envoi à partir d’une application externe dans le réseau GSM.
25
ʹǤͶǤ
ȋ
Ȍ
ʹǤͶǤͳǤ
ʹǤͶǤʹǤ ±
26
ʹǤͶǤ͵Ǥ
• Le SMS-IWMSC :
Interworking MSC for Short Message Service est l’entité capable de recevoir
le message court d’un MSC et de le soumettre à un SMSC.
Une entité extérieure au réseau GSM pouvant envoyer ou de recevoir des SMS,
ceci pourrait être une application ou des serveurs spécialisés.
27
ʹǤͶǤͶǤ
Ǥ ǦȋȌ
28
Figure 4: SMS-MO
29
6. Le SMSC retourne une réponse (rapport de livraison) au SMS-IWMSC.
Ǥ ǦȋȌ
Figure 5 : SMS-MT
30
Les informations obtenues lui permettent de relayer le message au MSC
approprié (MSC auquel est rattachée la station mobile destinataire).Cette
requête contient notamment le numéro MSISDN du destinataire.
31
10. Le VLR retourne une réponse MAP-SEND-INFO-FOR-MT-SMS-ack au
MSC, autorisant ce dernier à relayer le message court à la station mobile
destinataire.
Ǥ
Lors de l’envoi d’un SMS par un client (SMS-MO),le terminal mobile du client
code le message et l’envoie vers un MSC tout en y ajoutant deux informations
supplémentaires :
• le numéro du destinataire
• le numéro du SMSC à utiliser.
Ce dernier est stocké dans le terminal et permet au MSC de relayer le message vers
le SMSC en question. Dans le cas où le message ne peut pas être délivré au SMSC, le
réseau envoie un message d’acquittement négatif. Dans le cas contraire, le SMSC tente
d’envoyer le message vers le terminal du destinataire (SMS-MT) avec l’aide du MSC. Si
lors de l’envoi, la tentative échoue, comme par exemple le terminal mobile du
destinataire est éteint, le message est stocké par le SMSC et d’autres tentatives seront
effectuées à intervalles réguliers.
32
ǣ͵ǤͶ
Le protocole SMPP v3.4 a été créé par le groupe « SMS Standard Organization »
et publié le 12 octobre 1999. Il contient 169 pages.
Malgré quelques tentatives de mise à jour, à l’instar du SMPP v5.0, aucune autre version
du protocole n’a été aussi vulgarisée que le protocole SMPP v3.4. Ce dernier est
désormais devenu et considéré comme la seule et unique norme utilisée dans le monde
depuis la dissolution du groupe créateur.
Il est à noter que les définitions et les données ci-après fournissent, de manière
succincte, une explication des éléments indispensables à connaître concernant le
protocole.
͵ǤͳǤ
͵ǤʹǤ ͵ǤͶ
Le protocole SMPP ou Short Message Peer to Peer est un standard désigné pour
établir une interface de communication plus flexible pour le transfert de message entre
des centres de messagerie comme le SMSC et l’ESME. Ce protocole est un protocole
ouvert défini par SMS forum.
Du point de vue technique, c’est un protocole binaire de niveau 7 qui s’appuie sur
le protocole X25 et TCP/IP. Comme mentionné précédemment, c’est un protocole
standard qui facilite l’échange de données entre des centres de message comme SMSC
ou autre système d’application SMS. Le protocole est basé sur l’échange de requête et
réponse PDU entre un ESME et SMSC.
1
Définition Larousse
33
C’est-à-dire que le protocole SMPP définit principalement un ensemble
d’opérations et les PDU qui lui sont associés pour l’échange d’information et la
communication.
Il définit également les données qu’un ESME peut échanger avec le SMSC pendant
une opération SMPP. Toutes opérations SMPP consistent donc à des échanges de requête
PDU à laquelle est associé le PDU réponse correspondant. L’entité receveur doit alors
envoyer une réponse en retour, la seule exception est l’alert_notification qui ne possède
pas de réponse qui lui correspond.
Dans ce protocole, l’échange peut se faire soit au niveau du SMSC par le biais d’un
envoi de message vers un service qui se traduit par un envoi de requête SMPP depuis le
SMSC vers le service, soit au niveau du service qui envoie une requête SMPP vers le
SMSC. A noter qu’il est possible pour un service d’envoyer ou de recevoir plusieurs
SMS avant de recevoir ou envoyer des acquittements via le SMPP.
34
En principe, le protocole SMPP est composé d’environ une trentaine d’opérations
et à chacune d’elle est associé un PDU. Ils sont composés d’un en-tête (Header) suivi
d’un corps (body) dont le contenu dépend de l’opération à exécuter. Les opérations
implémentées par les PDU sont de types connexion, déconnexion, envoi de SMS, envoi
en masse, réception de SMS, acquittement, etc. À chaque requête doit correspondre un
acquittement.
Le tableau ci-dessous montre quelques exemples de requête PDU avec les réponses
correspondant͗
ESME to ESME SMSC to ESME
bind_transciever bind_transciever_resp
bind_transmitter bind_transmitter_resp
bind_receiver bind_receiver_resp
submit_sm submit_sm_resp
enquiry_link enquiry_link_resp
deliver_sm deliver_sm
Unbind unbind_resp
En général, le PDU est défini par une entête ou header suivi d’un corps ou body.
L'entête SMPP est un élément obligatoire pour chaque PDUSMPP et doit toujours être
présent. Le corps du PDU est une partie optionnelle et peut ne pas être inclus dans
chaque PDU.
35
Le tableau suivant illustre le format général du PDU dans le protocole SMPP :
PDU
PDU Body
PDU Header (obligatoire)
(optionnel)
Command Command Command Sequence
length id status number
• Command_length :
C’est un entier en 4 octets qui definit la longueur totale en octet d’un Packet PDU
incluant le command_length lui-même. C’est-à-dire le nombre total d’octets
contenus dans un PDU représenté en Big indian.
• Command_id :
C’est un entier en 4octets servant d’une identifiant qui est unique pour un PDU
particulier (ex : submit_sm,query_sm etc).
- Pour la requête PDU le command_id est dans le rang de 0x00000000 à
0x000001FF.
- Pour le PDU réponse, ce command_id est dans le rang de 0x80000000 à
0x800001FF.
36
• Command_status :
• Sequence_number :
͵ǤͶǤʹǤ
Le body d’un PDU est aussi constitué des paramètres obligatoire et des paramètres
optionnels.
Ce sont des paramètres qui sont obligatoirement définie selon le type de PDU
indiqué par le champ command_id ( ex bind_transmitter).
C’est une liste de paramètres pouvant être inclus ou non dans le PDU body et qui
correspondent au command_id du PDU spécifié (ex : submit_sm).
Dans ce qui suit, le tableau présente le flux de PDU lors d’un échange de requêtes.
Il faut noter que tous les paramètres mentionnés dans ces exemples sont décrits dans
l’annexe selon le Protocole SMPP.
37
͵ǤͶǤ͵Ǥ
• bind_transmitter :
¾ Paquet du PDU:
000000028000000020000000000000001596F75724C6F67696E0050617373776F72640
00000000000
¾ Descriptions :
¾ Paquet du PDU :
0000001E8000000200000000000000014E455453495A455F46525F303100
38
Ͳ 4E455453495A455F46525F303100 : system_id (identiificateur de l’entité) ex
« JMGateway »
¾ Paquet du PDU :
00000010800000010000000D00000001
¾ Description :
• Une session de type mixte ou tranceiver (TRX) qui permet de faire les deux
opérations recevoir et envoyer.
39
En général, une session SMPP est initiée par un ESME qui établit en premier lieu
une connexion réseau (TCP/IP ou X25) avec le SMSC et ensuite effectue une opération
bind (requête PDU) pour ouvrir une session SMPP. En effet, un ESME souhaitant
recevoir ou envoyer des messages doit établir :
Pendant une session SMPP, le ESME peut effectuer une série de requête SMPP et
recevoir les réponses appropriées à chaque demande de la part du SMSC. Il en est de
même pour un SMSC, qui peut aussi envoyer des requêtes SMPP à l’ESME qui devra
répondre en conséquence.
͵ǤͷǤͳǤ
• submit_sm
• deliver_sm
Le SMSC, à son tour, doit renvoyer les PDU réponses correspondant à laquelle sera
inclus un unique identificateur de message et aussi le statut qui informe le ESME si le
message envoyé est valide ou non (c’est-à-dire accepté par le SMSC pour être délivré).
40
Dans le cas où le message est non valide, le SMSC renvoie un code d’erreur. Pour
plus d’information sur les codes d’erreur (ref SMPP protocol).
• submit_sm_resp
• data_sm_resp
• query_sm_resp
• cancel_sm_resp
• replace_sm_resp
La figure ci-après présente une session de type transmitter pour l’envoi de SMS
d’un ESME vers un SMSC.
41
͵ǤͷǤʹǤ
La session SMPP peut être définie par ses états qui sont :
¾ L’état OPEN :
Une entité extérieure établit une connexion réseau avec un SMSC mais n’a pas
encore envoyé une requête bind.
ESME SMSC
Connexion réseau
¾ L’état BOUND_TX :
ESME SMSC
Connexion réseau
Bind_transmitter
Bind_transmitter_resp
42
¾ L’état BOUND_RX :
ESME SMSC
Connexion réseau
Outbind
Bind_receiver
Bind_receiver_resp
¾ L’état BOUND_TRX :
ESME SMSC
Connexion réseau
Bind_tranceiver
Bind_tranceiver_resp
43
¾ CLOSED (Déconnecté) :
¾ OutBound :
L’opération est donc initiée par le SMSC en effectuant en premier lieu une
connexion réseau avec l’ESME. Dès que la connexion réseau est établie, le SMSC envoie
un PDU Outbind à l’ESME à laquelle ce dernier doit répondre par un bind_receiver qui
sera aussi répondu par le SMSC en émettant un bind_receiver_resp.
Au moment où une session SMPP est établie, les caractéristiques de cette session
est parfaitement identique à celle d’une session receiver normale.
44
La figure suivante illustre le concept d’un outbind dans le cas où il est utilisé pour
demander à l’ESME d’exécuter une opération bind afin de recevoir les messages en
attente.
Ǥ ±Ȁ
Par définition, le TCP/IP est un protocole utilisé sur le réseau Internet pour
transmettre des données entre deux machines. C’est comme un langage universel
permettant la communication entre deux machines qu’importe leur système
d’exploitation
45
Ǥ
Ȁ
¾ La couche application
Une couche qui contient tous le protocole haut niveau comme le TELNET pour le
terminal virtuel FTP pour le transfert de fichier le SMTP pour le transfert de courrier
électronique, le HTTP pour le web le DNS pour le service de nommage etc.
¾ La couche transport
Cette couche a deux (02) protocoles de livraison d’information qui est indépendant
du réseau emprunté :
¾ La couche Internet
La couche internet sert d’une couche d’interconnexion basée sur le mode non
connecté. Elle est chargée de fournir le datagramme ou le paquet.
C’est la couche qui spécifie la forme sous laquelle les données doivent être
acheminées indépendamment au réseau utilisé.
46
La figure suivante illustre ce concept TCP/IP et son architecture.
L’architecture est basée sur les deux protocoles de base IP et TCP. En effet, le
TCP/IP est un ensemble de règles de communication sur Internet est basé sur la notion
d’adressage IP. Afin de pouvoir acheminer le paquet de données, une adresse IP est
fournie à chaque machine du réseau.
Ǥ ±Ȁ
47
ǣ
L’ESME est la désignation des applications externes aux réseaux GSM qui sont capables
de communiquer avec des serveurs SMS. L’ESME a la capacité de se connecter à un SMSC en
effectuant une opération bind, d’envoyer et de recevoir des messages et de clore la connexion par
le biais l’opération unbind.
Il faut noter qu’en principe, ces applications sont des programmes installés sur
l’ordinateur.
ͶǤ͵Ǥ
ͶǤ͵ǤͳǤ
48
Figure 14 : Contexte de la passerelle SMS
ͶǤ͵ǤʹǤ
La difficulté rencontrée avec les passerelles est la compatibilité entre deux SMSC
qui sont gérés avec des protocoles qui leurs sont propres et qui dépendent du
fournisseur : c’est l’une des problèmes majeurs des messageries SMS.
Afin de pallier à ce problème, pour relier deux SMSC, il faut utiliser une passerelle
entre les deux SMSC qui agit comme un convertisseur.
Plusieurs passerelles sont proposées par les fabricants sur le marché mais il existe
un moyen d’employer Kannel.
49
A titre d’exemple :
Ǥ
La libraire SMPP de logica est une API développée par sourceforge. Elle est l’une
des plus utilisées dans le monde commercial car son accès est libre sur Internet.
Par ailleurs, l’API de logica - dont la version 1.1 a été publiée le 28 novembre 2001
- est un ensemble de classe pour permettre d’établir la communication avec un SMSC
utilisant le protocole SMPP.
2
Le langage Java est un langage de programmation orienté objet très puissant grâce à la présence d’une
bibliothèque très riche. Pour la programmation réseau, java offre des possibilités de développement
d’applications fiables, rapides et réutilisables, mais aussi portable sur plusieurs systèmes d’exploitation
comme Unix, GNUlinux, Windows etc. C’est grâce à cette portabilité qui définit la valeur du programme
en java que les programmeurs actuels s’y sont beaucoup plus intéressés.
50
Pour la gestion des entrée et sortie, le concepteur de cette API a utilisé la
bibliothèque java.io qui est le paquetage fournissant les classes et les méthodes pour les
entrée et sortie en java.
Pour une meilleure compréhension de la librairie, les concepteurs de cette API ont mis à
disposition le simulateur SMSC Simulator de logica.
C’est l’application pour tester les opérations SMPP, c’est-à-dire l’échange de message entre une
application et un SMSC sans avoir à se connecter à un vrai SMSC (ex. SMSC de Orange). SMSC
simulator se comporte comme un vrai SMSC avec une interface SMPP. L’application ou l’ESME
peut se connecter, envoyer de message et se déconnecter à ce simulateur.
Toutefois, aucun SMS ne sera envoyé réellement. Toutes les réponses seront seulement
fournies par le simulateur. De plus, le simulateur peut supporter plusieurs clients connectés en
même temps.
Ǥ
Pour qu’une application puisse envoyer et recevoir des messages courts, elle a
toujours besoin de se connecter à un SMSC d’un opérateur de réseau mobile via Internet.
Si par exemple une école ou un établissement d’enseignement veut informer les étudiants
du résultat de l’examen avec l’aide du service de message court(SMS), la principale
recommandation est de se connecter et d’envoyer le message à partir d’un SMSC d’un
opérateur mobile (ex : Orange).
A noter que ce dernier est un logiciel libre, écrit en langage C et mise sous licence
freeBSD par la compagnie finlandaise Wapit ltd en 1999.
51
Kannel fournit une passerelle mixte SMS et WAP. Elle permet également de gérer
le push, le pull ou pull-push SMS, c'est-à-dire respectivement, l'envoi des messages aux
entités extérieures, la réception d'un SMS ou la réception de requête, puis l'envoi de la
réponse après traitement à partir de la plateforme.
ͶǤ͵ǤͶǤ
Ǥ ǣ
Comme vu précédemment, Kannel est un logiciel libre (open source) qui peut
fonctionner comme une passerelle SMS et comme un client SMPP capable d’envoyer et
de recevoir des SMS.
52
Pour les sociétés, son utilisation est nécessaire pour diminuer le coût des services et les
dépenses.
Dans l’étude et le test effectués avec l’API de logica qui se sert d’un serveur de
message court et Kannel comme client SMPP (ESME), les points suivants ont été
constatés :
En outre, Kannel ne peut pas gérer plusieurs clients quand il est utilisée en tant que
passerelle.
Ǥ ȋ Ȍǣ
Du point de vue global, java.io traite par défaut les données en mode flux et les
entrée/sortie en mode bloquant, c’est-à-dire qu’il traite les données octet par octet.
53
Tant qu’il n’y a rien à lire sur le socket ou qu’il n’y a pas d’espace disponible pour
écrire dessus, le thread sera bloqué. Il sera aussi débloqué en cas d’exception dû à un
timeout par exemple (cf. figure ci-dessous).
3
Un thread, appelé aussi processus léger ou activité, est un fil d'instructions (un chemin d’exécution) à
l'intérieur d'un processus. Définition dans Multithreading
54
ͶǤ͵ǤͷǤ ±
±
Les API proposées en open source sont jusqu’ici conçues à partir de la librairie
java.io. De par les limites exposées ci-dessus, la solution la plus efficace pour résoudre
ces problèmes est de concevoir une API construite autour de la nouvelle librairie
java.nio.
JM
Logica JSMPP
Gateway
Java.io Java.nio
¾ Pourquoi Java.nio ?
Le plus important est qu’elle fournit un système, le selector, pour écouter les
évènements sur les sockets. La ou les sockets sont enregistrées dans le selector en
précisant l’opération comme la lecture, l’écriture ou l’acceptation d’une demande de
connexion sur un socket défini.
Sur chaque appel à select (), le sélecteur créera une liste des Channel pour lesquels
une opération est prête à être réalisée. Le serveur doit toujours attendre qu’il y ait des
opérations disponibles sur ses sockets clients, mais la grande différence par rapport à
l’ancien est que le serveur attend une fois pour l’ensemble de ses clients au lieu
d’attendre pour un client.
55
En effet, ce système est une grande solution pour éviter le blocage sur le mode de
lecture et d’écriture au niveau du socket.
Pour traiter les requêtes en parallèle avec l’API java.io, il suffit de multiplier le
nombre de thread avec un thread par client. Dans ce cas, il n’y aura pas d’attente non
plus. Malheureusement, les threads ne peuvent pas être multipliés indéfiniment sans qu’il
n’y ait d’impact sur l’espace mémoire.
56
Or, le cadre concurrentiel doit supporter le maximum possible de client. Avec un
faible nombre de threads (1 par CPU), la consommation de mémoire est aussi inférieure,
ce qui implique que NIO est devenu une évidence pour tous.
Mise en
application
ͶǤͶǤͳǤ ±
Cette phase consiste à l’identification des besoins et à la mise en revue de tous les
systèmes existants, enfin à, l’étude de chaque composant qui va constituer le système.
ͶǤͶǤʹǤ
57
ͶǤͶǤ͵Ǥ ±°
ͶǤͶǤͶǤ
ͶǤͶǤͷǤ
ͶǤͷǤ _
En premier lieu, pour comprendre le principe Kannel est utilisée comme un client
SMPP, et l’interface de logica comme un serveur SMS qui doit répondre à toutes les
requêtes envoyées à travers Kannel.
58
Ci-dessous un aperçu du test effectué.
ͶǤͷǤͳǤ
Un message peut également être envoyé à partir d’une page Internet en tapant par
exemple ce code :
http://127.0.0.1:13013/cgi-
bin/sendsms?username=tester&password=foobar&from=0331276055&to=03312
76045&text=attendre.
59
Le résultat qui devra s’afficher à la réception sera « attendre ». Le message peut
être envoyé à plusieurs destinataires en y ajoutant les numéros précédés de « + » dans la
partie receiver.
N.B : A noter que plusieurs fakeSMSC peuvent être configurés en spécifiant des ports
différents propres à chaque fakeSMSC. Son numéro et son id sont à préciser afin de les
différencier.
60
Voici une présentation du fichier de configuration 4 pour se connecter à un
fakeSMSC.
ηKZ
Ğ
ηdŚĞƌĞŝƐŽŶůLJŽŶĞĐŽƌĞŐƌŽƵƉĂŶĚŝƚƐĞƚƐĂůůďĂƐŝĐƐĞƚƚŝŶŐƐ
ηŽĨƚŚĞďĞĂƌĞƌďŽdž;ĂŶĚƐLJƐƚĞŵͿ͘zŽƵƐŚŽƵůĚƚĂŬĞĞdžƚƌĂŶŽƚĞƐŽŶ
ηĐŽŶĨŝŐƵƌĂƚŝŽŶǀĂƌŝĂďůĞƐůŝŬĞΖƐƚŽƌĞͲĨŝůĞΖ;ŽƌΖƐƚŽƌĞͲĚŝƌΖͿ͕
ηΖĂĚŵŝŶͲĂůůŽǁͲŝƉΖĂŶĚΖĂĐĐĞƐƐ͘ůŽŐΖ
ŐƌŽƵƉсĐŽƌĞ
ĂĚŵŝŶͲƉŽƌƚсϭϯϬϬϬ
ƐŵƐďŽdžͲƉŽƌƚсϭϯϬϬϭ
ηǁĂƉďŽdžͲƉŽƌƚсϭϯϬϬϮ
ĂĚŵŝŶͲƉĂƐƐǁŽƌĚсďĂƌ
ηƐƚĂƚƵƐͲƉĂƐƐǁŽƌĚс
ĂĚŵŝŶͲĚĞŶLJͲŝƉсΗϭϮϳ͘Ϭ͘Ϭ͘ϭ͖Ύ͘Ύ͘Ύ͘ΎΗ
ĂĚŵŝŶͲĂůůŽǁͲŝƉсΗΎ͘Ύ͘Ύ͘ΎΗ
ůŽŐͲĨŝůĞсΗͰWƌŽŐƌĂŵ&ŝůĞƐͰ<ĂŶŶĞůϭ͘ϰ͘ϯͰŬĂŶŶĞů͘ůŽŐΗ
ůŽŐͲůĞǀĞůсϬ
ďŽdžͲĚĞŶLJͲŝƉсΗΎ͘Ύ͘Ύ͘ΎΗ
ďŽdžͲĂůůŽǁͲŝƉсΗϭϮϳ͘Ϭ͘Ϭ͘ϭ͖Ύ͘Ύ͘Ύ͘ΎΗ
ƵŶŝĨŝĞĚͲƉƌĞĨŝdžсΗнϮϮϴ͕ϬϬϮϮϴ͕Ϭ͖н͕ϬϬΗ
ĂĐĐĞƐƐͲůŽŐсΗ͗ͰWƌŽŐƌĂŵ&ŝůĞƐͰ<ĂŶŶĞůϭ͘ϰ͘ϯͰŬĂŶŶĞů͘ůŽŐΗ
ƐƚŽƌĞͲĨŝůĞсΗͰWƌŽŐƌĂŵ&ŝůĞƐͰ<ĂŶŶĞůϭ͘ϰ͘ϯͰƐƚŽƌĞΗ
ǁŚŝƚĞͲůŝƐƚсΗŚƚƚƉ͗ͬͬůŽĐĂůŚŽƐƚͬǁŚŝƚĞůŝƐƚ͘ƚdžƚΗ
ηƐƐůͲƐĞƌǀĞƌͲĐĞƌƚͲĨŝůĞсΗĐĞƌƚ͘ƉĞŵΗ
ηƐƐůͲƐĞƌǀĞƌͲŬĞLJͲĨŝůĞсΗŬĞLJ͘ƉĞŵΗ
ηƐƐůͲĐĞƌƚŬĞLJͲĨŝůĞсΗŵLJĐĞƌƚĂŶĚƉƌŝǀŬĞLJĨŝůĞ͘ƉĞŵΗ
ηͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲ
η^D^KEEd/KE^
η
η^D^ĐŽŶŶĞĐƚŝŽŶƐĂƌĞĐƌĞĂƚĞĚŝŶďĞĂƌĞƌďŽdžĂŶĚƚŚĞLJŚĂŶĚůĞ^D^ƐƉĞĐŝĨŝĐ
ηƉƌŽƚŽĐŽůĂŶĚŵĞƐƐĂŐĞƌĞůLJŝŶŐ͘zŽƵŶĞĞĚƚŚĞƐĞƚŽĂĐƚƵĂůůLJƌĞĐĞŝǀĞĂŶĚƐĞŶĚ
ηŵĞƐƐĂŐĞƐƚŽŚĂŶĚƐĞƚ͕ďƵƚĐĂŶƵƐĞ'^DŵŽĚĞŵƐĂƐǀŝƌƚƵĂů^D^Ɛ
ηdŚŝƐŝƐĂĨĂŬĞƐŵƐĐĐŽŶŶĞĐƚŝŽŶ͕ͺŽŶůLJͺƵƐĞĚƚŽƚĞƐƚƚŚĞƐLJƐƚĞŵĂŶĚƐĞƌǀŝĐĞƐ͘
η/ƚƌĞĂůůLJĐĂŶŶŽƚƌĞůĂLJŵĞƐƐĂŐĞƐƚŽĂĐƚƵĂůŚĂŶĚƐĞƚƐ͊
ŐƌŽƵƉсƐŵƐĐ
ƐŵƐĐсĨĂŬĞ
ƐŵƐĐͲŝĚс&<
ƉŽƌƚсϭϬϬϬϬ
ĐŽŶŶĞĐƚͲĂůůŽǁͲŝƉсϭϮϳ͘Ϭ͘Ϭ͘ϭ
ηͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲ
η^D^Ky^dhW
η^ŵƐďŽdž;ĞƐͿĚŽŚŝŐŚĞƌͲůĞǀĞů^D^ŚĂŶĚůŝŶŐĂĨƚĞƌƚŚĞLJŚĂǀĞďĞĞŶƌĞĐĞŝǀĞĚĨƌŽŵ
η^D^ĐĞŶƚĞƌƐďLJďĞĂƌĞƌďŽdž͕ŽƌďĞĨŽƌĞƚŚĞLJĂƌĞŐŝǀĞŶƚŽďĞĂƌĞƌďŽdžĨŽƌĚĞůŝǀĞƌLJ
ŐƌŽƵƉсƐŵƐďŽdž
ďĞĂƌĞƌďŽdžͲŚŽƐƚсϭϮϳ͘Ϭ͘Ϭ͘ϭ
ƐĞŶĚƐŵƐͲƉŽƌƚсϭϯϬϭϯ
ηŐůŽďĂůͲƐĞŶĚĞƌсϭϮϯϰϱϲ
ηƐĞŶĚƐŵƐͲĐŚĂƌƐсΗϭϮϯϰϱϲϳϴϵΗ
ηůŽŐͲĨŝůĞсΗͬƚŵƉͬƐŵƐďŽdž͘ůŽŐΗ
ůŽŐͲĨŝůĞсΗͰWƌŽŐƌĂŵ&ŝůĞƐͰ<ĂŶŶĞůϭ͘ϰ͘ϯͰƐŵƐďŽdž͘ůŽŐΗ
ůŽŐͲůĞǀĞůсϬ
ĂĐĐĞƐƐͲůŽŐсΗͰWƌŽŐƌĂŵ&ŝůĞƐͰ<ĂŶŶĞůϭ͘ϰ͘ϯͰůŽŐƐΗηǁŚŝƚĞͲůŝƐƚсhZ>
ηůŽŐͲůĞǀĞůсϬ
ηĂĐĐĞƐƐͲůŽŐсΗͬƚŵƉͬĂĐĐĞƐƐ͘ůŽŐΗ
4
En informatique, un fichier de configuration contient des informations de configuration utilisées par un
programme informatique pour adapter ou personnaliser son fonctionnement. Définition wikipédia
61
ŐƌŽƵƉсƐŵƐͲƐĞƌǀŝĐĞ
ŬĞLJǁŽƌĚсĚĞĨĂƵůƚ
ƚĞdžƚсΗEŽƐĞƌǀŝĐĞƐƉĞĐŝĨŝĞĚΗ
tWKy^dhW
ηŐƌŽƵƉсǁĂƉďŽdž
ηďĞĂƌĞƌďŽdžͲŚŽƐƚсϭϮϳ͘Ϭ͘Ϭ͘ϭ
ηůŽŐͲĨŝůĞсΗͬƚŵƉͬǁĂƉďŽdž͘ůŽŐΗ
ηůŽŐͲůĞǀĞůсϬ
ƐLJƐůŽŐͲůĞǀĞůсŶŽŶĞ
ηĂĐĐĞƐƐͲůŽŐсΗͬƚŵƉͬǁĂƉĂĐĐĞƐƐ͘ůŽŐΗ
ηͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲ
η^EͲ^D^h^Z^
ηdŚĞƐĞƵƐĞƌƐĂƌĞƵƐĞĚǁŚĞŶ<ĂŶŶĞůƐŵƐďŽdžƐĞŶĚƐŵƐŝŶƚĞƌĨĂĐĞŝƐƵƐĞĚƚŽ
ηƐĞŶĚWh^,ƐŵƐŵĞƐƐĂŐĞƐ͕ŝ͘Ğ͘ĐĂůůŝŶŐhZ>ůŝŬĞ
ηŚƚƚƉ͗ͬͬŬĂŶŶĞů͘ŵĂĐŚŝŶĞ͗ϭϯϬϭϯͬĐŐŝͲďŝŶͬƐĞŶĚƐŵƐ͍ƵƐĞƌŶĂŵĞсƚĞƐƚĞƌΘƉĂƐƐǁŽƌĚсĨŽŽďĂƌ͘͘͘
ŐƌŽƵƉсƐĞŶĚƐŵƐͲƵƐĞƌ
ƵƐĞƌŶĂŵĞсƚĞƐƚĞƌ
ƉĂƐƐǁŽƌĚсĨŽŽďĂƌ
ƵƐĞƌͲĚĞŶLJͲŝƉсΗΎ͘Ύ͘Ύ͘ΎΗ
ƵƐĞƌͲĂůůŽǁͲŝƉсΗΎ͘Ύ͘Ύ͘ΎΗĨĂŬĞĚͲƐĞŶĚĞƌсϭ
ŽŵŝƚͲĞŵƉƚLJсϭ
ĨŽƌĐĞĚͲƐŵƐĐсƐŵƐĐͲŝĚ
ŐƌŽƵƉсƐŵƐͲƐĞƌǀŝĐĞ͘ŬĞLJǁŽƌĚсŚĞƵƌĞ
ηŚĞĂĚĞƌсŬƌŚͺƐƚŐ
ĨŽŽƚĞƌсŵĞƌĐŝ
ĂĐĐĞƉƚĞĚͲƐŵƐĐсƐŵƐĐ
ĨĂŬĞĚͺƐĞŶĚĞƌсϭϬϬ
ŽŵŝƚͲĞŵƉƚLJсϭ
ηƵƐĞƌͲĚĞŶLJͲŝƉсΗΗ
ηƵƐĞƌͲĂůůŽǁͲŝƉсΗΗ
ηͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲ
η^Zs/^
η
ηdŚĞƐĞĂƌĞΖƌĞƐƉŽŶƐĞƐΖƚŽƐŵƐWh>>ŵĞƐƐĂŐĞƐ͕ŝ͘Ğ͘ŵĞƐƐĂŐĞƐĂƌƌŝǀŝŶŐĨƌŽŵ
ηŚĂŶĚƐĞƚƐ͘dŚĞƌĞƐƉŽŶƐĞŝƐďĂƐĞĚŽŶŵĞƐƐĂŐĞĐŽŶƚĞŶƚ͘KŶůLJŽŶĞƐŵƐͲƐĞƌǀŝĐĞŝƐ
ηĂƉƉůŝĞĚ͕ƵƐŝŶŐƚŚĞĨŝƌƐƚŽŶĞƚŽŵĂƚĐŚ͘
ŐƌŽƵƉсƐŵƐͲƐĞƌǀŝĐĞ
ŬĞLJǁŽƌĚсŶŽƉ
ƚĞdžƚсΗzŽƵĂƐŬĞĚŶŽƚŚŝŶŐĂŶĚ/ĚŝĚŝƚ͊Η
ηdŚĞƌĞƐŚŽƵůĚďĞĂůǁĂLJƐĂΖĚĞĨĂƵůƚΖƐĞƌǀŝĐĞ͘dŚŝƐƐĞƌǀŝĐĞŝƐƵƐĞĚǁŚĞŶŶŽ
ηŽƚŚĞƌΖƐŵƐͲƐĞƌǀŝĐĞΖŝƐĂƉƉůŝĞĚ͘
ŐƌŽƵƉсƐŵƐͲƐĞƌǀŝĐĞ
ŬĞLJǁŽƌĚсĚĞĨĂƵůƚ
ƚĞdžƚсΗEŽƐĞƌǀŝĐĞƐƉĞĐŝĨŝĞĚΗ
62
Ǥ ±
Ǥ
63
ͶǤͷǤʹǤ °
Ǥ Ǥ
Ǥ
Comme précisé dans les fichiers configurés ci-dessus, le numéro de port à 5019 a
été spécifié. L’utilitaire « apache ant 1.8.2 » a été utilisé pour la compilation et la
création d’un jarfile (sources logica) à utiliser lors de la simulation.
Lors de l’exécution, les mêmes manipulations qu’avec SMSC ont été reprises et les
résultats sont les mêmes.
64
Voici une présentation du fichier de configuration pour ce test.
KZ
η
ηdŚĞƌĞŝƐŽŶůLJŽŶĞĐŽƌĞŐƌŽƵƉĂŶĚŝƚƐĞƚƐĂůůďĂƐŝĐƐĞƚƚŝŶŐƐ
ηŽĨƚŚĞďĞĂƌĞƌďŽdž;ĂŶĚƐLJƐƚĞŵͿ͘zŽƵƐŚŽƵůĚƚĂŬĞĞdžƚƌĂŶŽƚĞƐŽŶ
ηĐŽŶĨŝŐƵƌĂƚŝŽŶǀĂƌŝĂďůĞƐůŝŬĞΖƐƚŽƌĞͲĨŝůĞΖ;ŽƌΖƐƚŽƌĞͲĚŝƌΖͿ͕
ηΖĂĚŵŝŶͲĂůůŽǁͲŝƉΖĂŶĚΖĂĐĐĞƐƐ͘ůŽŐΖ
ŐƌŽƵƉсĐŽƌĞ
ĂĚŵŝŶͲƉŽƌƚсϭϯϬϬϬ
ƐŵƐďŽdžͲƉŽƌƚсϭϯϬϬϭ
ĂĚŵŝŶͲƉĂƐƐǁŽƌĚсďĂƌ
ĚůƌͲƐƚŽƌĂŐĞсŝŶƚĞƌŶĂů
ηƐƚĂƚƵƐͲƉĂƐƐǁŽƌĚсĨŽŽ
ηĂĚŵŝŶͲĚĞŶLJͲŝƉсΗΗ
ηĂĚŵŝŶͲĂůůŽǁͲŝƉсΗΗ
ůŽŐͲĨŝůĞсΗͬĚĂƚĂͬŽƌĂŶŐĞͬŐĂƚĞǁĂLJͲϭ͘ϰ͘ϯͬůŽŐƐͬďĞĂƌĞƌ͘ůŽŐΗ
ůŽŐͲůĞǀĞůсϬ
ďŽdžͲĚĞŶLJͲŝƉсΗΎ͘Ύ͘Ύ͘ΎΗ
ďŽdžͲĂůůŽǁͲŝƉсΗϭϮϳ͘Ϭ͘Ϭ͘ϭΗ
ηƵŶŝĨŝĞĚͲƉƌĞĨŝdžсΗнϯϱϴ͕ϬϬϯϱϴ͕Ϭ͖н͕ϬϬΗ
ĂĐĐĞƐƐͲůŽŐсΗͬĚĂƚĂͬŽƌĂŶŐĞͬŐĂƚĞǁĂLJͲϭ͘ϰ͘ϯͬůŽŐƐͬĂĐĐĞƐƐ͘ůŽŐΗ
ƐƚŽƌĞͲƚLJƉĞсƐƉŽŽů
ƐƚŽƌĞͲůŽĐĂƚŝŽŶсΗͬĚĂƚĂͬŽƌĂŶŐĞͬŐĂƚĞǁĂLJͲϭ͘ϰ͘ϯͬƐƚŽƌĞΗ
ƐƚŽƌĞͲĚƵŵƉͲĨƌĞƋсϯϬ
ηĚůƌͲƐƚŽƌĂŐĞсŵLJƐƋů
ƐŵƐͲƌĞƐĞŶĚͲƌĞƚƌLJсϱ
ηƐƐůͲƐĞƌǀĞƌͲĐĞƌƚͲĨŝůĞсΗĐĞƌƚ͘ƉĞŵΗ
ηƐƐůͲƐĞƌǀĞƌͲŬĞLJͲĨŝůĞсΗŬĞLJ͘ƉĞŵΗ
ηƐƐůͲĐĞƌƚŬĞLJͲĨŝůĞсΗŵLJĐĞƌƚĂŶĚƉƌŝǀŬĞLJĨŝůĞ͘ƉĞŵΗ
ηͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲ
η^D^KEEd/KE^
η
η^D^ĐŽŶŶĞĐƚŝŽŶƐĂƌĞĐƌĞĂƚĞĚŝŶďĞĂƌĞƌďŽdžĂŶĚƚŚĞLJŚĂŶĚůĞ^D^ƐƉĞĐŝĨŝĐ
ηƉƌŽƚŽĐŽůĂŶĚŵĞƐƐĂŐĞƌĞůLJŝŶŐ͘zŽƵŶĞĞĚƚŚĞƐĞƚŽĂĐƚƵĂůůLJƌĞĐĞŝǀĞĂŶĚƐĞŶĚ
ηŵĞƐƐĂŐĞƐƚŽŚĂŶĚƐĞƚ͕ďƵƚĐĂŶƵƐĞ'^DŵŽĚĞŵƐĂƐǀŝƌƚƵĂů^D^Ɛ
ηdŚŝƐŝƐĂĨĂŬĞƐŵƐĐĐŽŶŶĞĐƚŝŽŶ͕ͺŽŶůLJͺƵƐĞĚƚŽƚĞƐƚƚŚĞƐLJƐƚĞŵĂŶĚƐĞƌǀŝĐĞƐ͘
η/ƚƌĞĂůůLJĐĂŶŶŽƚƌĞůĂLJŵĞƐƐĂŐĞƐƚŽĂĐƚƵĂůŚĂŶĚƐĞƚƐ͊
ŐƌŽƵƉсƐŵƐĐ
ƐŵƐĐсƐŵƉƉ
ƐŵƐĐͲŝĚс>ŽŐŝĐĂ
ŚŽƐƚсϭϮϳ͘Ϭ͘Ϭ͘ϭ
ƉŽƌƚсϱϬϭϵ
ƐŵƐĐͲƵƐĞƌŶĂŵĞсƵƐĞƌϭ
ƐŵƐĐͲƉĂƐƐǁŽƌĚсƉĂƐƐǁŽƌĚϭ
ƐLJƐƚĞŵͲƚLJƉĞсΗ>ŽŐŝĐĂΗ
ƚƌĂŶƐĐĞŝǀĞƌͲŵŽĚĞсƚƌƵĞ
ηͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲ
η^D^Ky^dhW
η
η^ŵƐďŽdž;ĞƐͿĚŽŚŝŐŚĞƌͲůĞǀĞů^D^ŚĂŶĚůŝŶŐĂĨƚĞƌƚŚĞLJŚĂǀĞďĞĞŶƌĞĐĞŝǀĞĚĨƌŽŵ
η^D^ĐĞŶƚĞƌƐďLJďĞĂƌĞƌďŽdž͕ŽƌďĞĨŽƌĞƚŚĞLJĂƌĞŐŝǀĞŶƚŽďĞĂƌĞƌďŽdžĨŽƌĚĞůŝǀĞƌLJ
ŐƌŽƵƉсƐŵƐďŽdž
ďĞĂƌĞƌďŽdžͲŚŽƐƚсϭϮϳ͘Ϭ͘Ϭ͘ϭ
ƐĞŶĚƐŵƐͲƉŽƌƚсϭϯϬϭϯ
ηŐůŽďĂůͲƐĞŶĚĞƌсϭϯϬϭϯ
ηƐĞŶĚƐŵƐͲĐŚĂƌƐсΗϬϭϮϯϰϱϲϳϴϵнͲΗ
ηǁŚŝƚĞͲůŝƐƚͲƌĞŐĞdžсΔ;͗н͗ϮϲϭϬͲϵϬͲϵϬͲϵϬͲϵϬͲϵͿΨ
ůŽŐͲĨŝůĞсΗͬĚĂƚĂͬŽƌĂŶŐĞͬŐĂƚĞǁĂLJͲϭ͘ϰ͘ϯͬůŽŐƐͬƐŵƐďŽdž͘ůŽŐΗ
ůŽŐͲůĞǀĞůсϬ
ĂĐĐĞƐƐͲůŽŐсΗͬĚĂƚĂͬŽƌĂŶŐĞͬŐĂƚĞǁĂLJͲϭ͘ϰ͘ϯͬůŽŐƐͬĂĐĐĞƐƐ͘ůŽŐΗ
ŵŽͲƌĞĐŽĚĞсƚƌƵĞ
ηͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲ
η^EͲ^D^h^Z^
η
ηdŚĞƐĞƵƐĞƌƐĂƌĞƵƐĞĚǁŚĞŶ<ĂŶŶĞůƐŵƐďŽdžƐĞŶĚƐŵƐŝŶƚĞƌĨĂĐĞŝƐƵƐĞĚƚŽ
65
^EͲ^D^h^Z^
η
ηdŚĞƐĞƵƐĞƌƐĂƌĞƵƐĞĚǁŚĞŶ<ĂŶŶĞůƐŵƐďŽdžƐĞŶĚƐŵƐŝŶƚĞƌĨĂĐĞŝƐƵƐĞĚƚŽ
ηƐĞŶĚWh^,ƐŵƐŵĞƐƐĂŐĞƐ͕ŝ͘Ğ͘ĐĂůůŝŶŐhZ>ůŝŬĞ
ηŚƚƚƉ͗ͬͬŬĂŶŶĞů͘ŵĂĐŚŝŶĞ͗ϭϯϬϭϯͬĐŐŝͲďŝŶͬƐĞŶĚƐŵƐ͍ƵƐĞƌŶĂŵĞсƚĞƐƚĞƌΘƉĂƐƐǁŽƌĚсĨŽŽďĂƌ͘͘͘
ŐƌŽƵƉсƐĞŶĚƐŵƐͲƵƐĞƌ
ƵƐĞƌŶĂŵĞсƚĞƐƚĞƌ
ƉĂƐƐǁŽƌĚсĨŽŽďĂƌ
ηƵƐĞƌͲĚĞŶLJͲŝƉсΗΗ
ηƵƐĞƌͲĂůůŽǁͲŝƉсΗϭϮϳ͘Ϭ͘Ϭ͘ϭ͕ϭϵϮ͘ϭϲϴ͘ϭϱ͘ϱϵ͕ϭϵϮ͘ϭϲϴ͘Ϯϯ͘ϭϰϰΗ
ŐƌŽƵƉсƐĞŶĚƐŵƐͲƵƐĞƌ
ƵƐĞƌŶĂŵĞс
ƉĂƐƐǁŽƌĚс
ηͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲͲ
η^Zs/^
η
ηdŚĞƐĞĂƌĞΖƌĞƐƉŽŶƐĞƐΖƚŽƐŵƐWh>>ŵĞƐƐĂŐĞƐ͕ŝ͘Ğ͘ŵĞƐƐĂŐĞƐĂƌƌŝǀŝŶŐĨƌŽŵ
ηŚĂŶĚƐĞƚƐ͘dŚĞƌĞƐƉŽŶƐĞŝƐďĂƐĞĚŽŶŵĞƐƐĂŐĞĐŽŶƚĞŶƚ͘KŶůLJŽŶĞƐŵƐͲƐĞƌǀŝĐĞŝƐ
ηĂƉƉůŝĞĚ͕ƵƐŝŶŐƚŚĞĨŝƌƐƚŽŶĞƚŽŵĂƚĐŚ͘
ŐƌŽƵƉсƐŵƐͲƐĞƌǀŝĐĞ
ŬĞLJǁŽƌĚсŶŽƉ
ƚĞdžƚсΗzŽƵĂƐŬĞĚŶŽƚŚŝŶŐĂŶĚ/ĚŝĚŝƚ͊Η
ηdŚĞƌĞƐŚŽƵůĚďĞĂůǁĂLJƐĂΖĚĞĨĂƵůƚΖƐĞƌǀŝĐĞ͘dŚŝƐƐĞƌǀŝĐĞŝƐƵƐĞĚǁŚĞŶŶŽ
ηŽƚŚĞƌΖƐŵƐͲƐĞƌǀŝĐĞΖŝƐĂƉƉůŝĞĚ͘
ηŐƌŽƵƉсƐŵƐͲƐĞƌǀŝĐĞ
ηŬĞLJǁŽƌĚсĚĞĨĂƵůƚ
ηƚĞdžƚсΗEŽƐĞƌǀŝĐĞƐƉĞĐŝĨŝĞĚΗ
ηƚĞdžƚсΗΗ
ηͲͲͲ,ŽŶŽƌĠĞƚDŝƌŝũĂͲͲͲ
ŐƌŽƵƉсƐŵƐͲƐĞƌǀŝĐĞ
ŬĞLJǁŽƌĚсĚĞĨĂƵůƚ
ŐĞƚͲƵƌůсΗŚƚƚƉ͗ͬͬϭϮϳ͘Ϭ͘Ϭ͘ϭ͗ϲϬϴϬͬƐĞƌǀůĞƚϭͬ^ƚŽƌĞ^ŵƐ͍ŝĚсй/ΘĨƌŽŵсйƉΘƚŽсйWΘƚĞdžƚсйĂΘƐŵƐĐсйŝΗ
ĂĐĐĞƉƚͲdžͲŬĂŶŶĞůͲŚĞĂĚĞƌƐсƚƌƵĞ
ŵĂdžͲŵĞƐƐĂŐĞƐсϬ
ĐŽŶĐĂƚĞŶĂƚŝŽŶсƚƌƵĞ
66
Ǥ
±
Deux (02) fakeSMSC et un SMSCsim de logica ont été utilisés afin d’effectuer le
test.
Pour chaque fakeSMSC, chaque numéro de port a été spécifié. Un essai d’envoi de
SMS via un fakeSMSC vers le logica a été effectué. Et le résultat montre les limites de
Kannel car si le SMS est envoyé deux fois, le message peut arriver à destination mais de
façon aléatoire ; c'est-à-dire qu’il peut envoyer un SMS au logica et un autre revient vers
le fakeSMSC ; ou par exemple, les deux SMS peuvent être reçus sur les fakeSMSC ou
l’inverse.
Ǥ ±
Ǥ
67
La conception de l’API est la base du présente mémoire. Cette phase est la plus
longue et difficile, parce que il faut maitriser la spécification du protocole SMPP.
Pour cette partie, la version 3.4 a été utilisée comme la version par défaut du protocole.
2. Programmation des modules qui sont utiles pour la conception des PDU, par
exemple, le module pour encodage et décodage de caractère, les modules de
conversion de type de traitement entier en octet par exemple ;
3. Programmation des différents modules qui entrent en jeu lors d’une session
SMPP ;
4. Pro.
68
ͶǤǤͳǤ
±
*Les informations détaillées sur les classes illustrées sur ce diagramme sont données en annexes
4 et 5.
69
ͶǤǤʹǤ
*Les informations détaillées sur les classes illustrées sur ce diagramme sont données en annexes
6, 7 et 8.
ͶǤǤ͵Ǥ
Ǥ
70
Ǥ
C’est une classe contenant tous les éléments constituant l’entête du PDU.
Ǥ
C’est la classe qui représente le corps du PDU. Elle est abstraite et contient toutes
les informations utiles possibles et définies par la spécification du protocole SMPP.
Cette classe met à la disposition de chaque programmeur des méthodes pouvant
retourner les valeurs de chaque paramètre (exemple : la méthode getSystem_id() pour
avoir l’identifiant du ESME et du SMSC).
Ǥ ±
71
PDU DESCRIPTION FONCTION
• Si le code d’erreur est nul,
C’est une réponse à la
il est composé d’un
requête transmitter qu’un
PDUHeader et d’un
SMSC doit renvoyer après
Bind_transmitter_resp PDUBody
avoir reçu et traité cette
• Si le code d’erreur est non
requête.
nul alors il n’y a que le
PDUHeader
C’est une requête
• Contient un PDUHeader et employée par un ESME
Bind_receiver un PDUBody. pour demander une session
• Le code d’erreur ne peut receiver (session pour
prendre que la valeur nulle seulement la réception de
SMS)
• Si le code d’erreur est nul
alors il est composé d’un C’est une réponse à la
PDUHeader et d’un requête receiver qu’un
Bind_receiver_resp PDUBody SMSC doit renvoyer après
• Si le code d’erreur est non avoir reçu et traité cette
nul alors il n’y a que le requête
PDUHeader
C’est une requête
• Contient un PDUHeader et
employée par un ESME
un PDUBody.
Bind_transceiver pour demander une session
• Le code d’erreur ne peut
transceiver (session pour la
prendre que la valeur nulle
réception et envoi de SMS)
• Si le code d’erreur est nul
alors il est composé d’un C’est une réponse à la
PDUHeader et d’un requête receiver qu’un
Bind_transceiver_resp PDUBody SMSC doit renvoyer après
• Si le code d’erreur est non avoir reçu et traité cette
nul alors il n’y a que le requête
PDUHeader
Requête envoyée par un
• Contient un PDUHeader et
SMSC pour notifier le
un PDUBody
outbind ESME d’effectuer un
• Son code d’erreur est
bind_receiver quand il y a
obligatoirement de valeur
des SMS en attente pour
nulle
être délivrés
• C’est un PDU qui ne Requête envoyée par un
Unbind contient qu’un PDUHeader SMSC ou un ESME pour
• Le code d’erreur est nul clore une session.
72
PDU DESCRIPTION FONCTION
Réponse correspondant à
• Ne contient qu’un
Unbind_resp l’acceptation de fermeture
PDUHeader
de session.
PDU qui contient le
• Doit contenir un
message à envoyer à un
Submit_sm PDUHeader et PDUBody
SMSC
• Code d’erreur doit être nul
• Ne contient qu’un
PDUHeader
Réponse du SMSC lors
• Son code d’erreur indique
Replace_sm_resp d’une demande de
la raison de l’échec s’il
remplacement
n’est pas nul.
73
PDU DESCRIPTION FONCTION
• Contient un PDUHeader et Requête pour signifier au
Cancel_SM un PDUBody SMSC d’annuler les SMS
• Code d’erreur doit être nul envoyés
• Ne contient qu’un
Réponse du SMSC lors
PDUHeader
Cancel_SM_resp d’une demande
• Son code d’erreur indique
d’annulation de la part
la raison de l’échec s’il
d’un ESME
n’est pas nul.
• Doit contenir un Requête envoyer au SMSC
Query_sm PDUHeader et PDUBody pour demander si l’envoi
• Code d’erreur doit être nul d’un sms e été un succès
• Doit contenir un Réponse du SMSC pour
Query_sm_resp PDUHeader et PDUBody informer l’ESME si le
• Code d’erreur indique la message a été bien pris en
situation du message compte
Requête utilisée pour
l’envoi de SMS que ce soit
• Contient PDUHeader et
du coté SMSC ou ESME
Data_sm PDUBody
C’est une PDU qui est
• Le code d’erreur est nul
l’alternative de submit_sm
et submit_multi
• Contient PDUHeader et
Réponse correspondante
Data_sm_resp PDUBody
adata_sm
• Le code d’erreur est nul
Requête envoyée par un
• Contient seulement un
ESME ou un SMSC pour
enquire_link Header
vérifier si la connexion est
• Le code d’erreur est nul
toujours établie
• Contient seulement un
Enquire_link_resp Header Réponse correspondant à
• Le code d’erreur doit être enquire_link
nul
• Contient un body et un
Requête envoyée pour
Header
Alert_notification envoyer un accusé de
• Le code d’erreur est
réception
toujours nul
• Un PDU qui contient Réponse envoyée par
Generic_nack seulement un Header l’ESME ou le SMSC si le
• Le code d’erreur ne doit PDUHeader d’une requête
jamais être nul est invalide
Tableau 3 : Caractéristiques des différents PDU
74
Ǥ
75
Voici le diagramme hiérarchique des classes héritant de PDUBody
76
ͶǤǤͶǤ
Une session est l’échange de PDU entre deux entités qui sont l’ESME et un SMSC
après l’établissement d’une connexion TCP/IP. Chaque session est définie par plusieurs
états et permet ainsi de lister les requêtes PDU qui peuvent être envoyées et reçues
jusqu’à sa fermeture.
• « BOUND_TX » est l’un des états qui définit le statut et la raison d’être
de la session. Il définit que l’ESME va effectuer un envoi de message à
l’encontre du SMSC. Cet état se termine lorsque l’un des deux entités
initie une opération de type unbind.
77
C’est une alternative mise en place pour éviter l’ouverture de deux
sessions différentes pour gérer l’envoi et la réception de message. Il prend
en compte tous les types de requêtes gérées et permises par l’état
« BOUND_TX » et l’état « BOUND_RX ».
• La classe SessionState est une classe qui énumère les différents types
d’états pris par une session et met à la disposition des méthodes qui
retournent des boolean pour signifier qu’une session est dans un état où il
peut recevoir ou transmettre un message.
Exemple d’instanciation : SessionState state= SessionState.OPEN ;
Les tâches sont les traitements de requête ou de réponse qui doivent et peuvent être
réalisées pour un état explicité. Dans cette API, il existe 17 classes qui sont utiles pour
les traitements des requêtes pendant une session entre deux entités. (ex :
Submit_Task,Receive_Task).
78
Les tâches envoient une notification à une session où elle est instanciée dans le but
de donner le résultat des opérations comme la construction d’une requête à envoyer ou le
traitement d’un PDU reçu. Elle permet de mémoriser des messages reçus ou extraire des
messages à envoyer d’une liste.
Ici, cette liste est représentée par une classe appelée Reference.
La classe Reference n’est autre qu’une classe qui permet d’enregistrer différents
paramètres qui sont employés ou extraits dans un PDU, et qui sont utiles pour une entité
(ESME ou SMSC).
Ǥ
En conclusion, une session SMPP est divisé en quatre sessions bien distinctes. Pour
qu’une session SMPP soit complète, il faut que chaque type de session soit effectué.
Voici les cas de figures qui peuvent se présenter lors d’une session SMPP :
A noter qu’à chacune de ces cas de figure, si une demande des sessions n’est pas
valide ou comporte un problème, la Session_CLOSED peut être tout de suite appelée
pour initier une demande de fermeture de la session SMPP.
79
Ǥ
±
±
80
TYPE DE SESSION ETAT PROPRE CARACTERISTIQUES
SESSION_CLIENT_BOUND_TX BOUND_TX Cette classe permet de traiter des
réponses et d’envoyer des requêtes
pour l’envoi de message à un
SMSC
SESSION_SERVER_BOUND_TRX BOUND_TRX Cette classe permet de gérer
l’envoi et la réception de message
avec un ESME
SESSION_CLIENT_BOUND_TRX BOUND_TRX Cette classe permet de gérer
l’envoi et la réception de message
avec un SMSC
SESSION_SERVER_CLOSED CLOSED Cette classe permet de gérer la
déconnexion ou la fermeture de
connexion avec un ESME
SESSION_CLIENT_CLOSED CLOSED Cette classe permet de gérer la
déconnexion ou la fermeture de
connexion avec un SMSC
81
Ǥ
82
ͶǤǤͷǤ
ͶǤǤǤ
Compte tenu de la quantité trop importante des classes, quelques tests permettant
de démontrer la pertinence des résultats obtenus seront exposés dans cet ouvrage.
Ǥ
¾ Démarche :
¾ Résultat :
83
Le paquet suivant a été obtenu :
000280001000000014d4952494a4103138373847570424f524e45034580
¾ Discussion :
De par ces valeurs, les résultats obtenus à partir des classes pour construire les
PDU sont exacts.
Ǥ °
¾ Démarche :
Une classe test, qui permet l’instanciation d’une tache afin de construire d’une
requête UNBIND pour la fermeture de session entre deux entités, a été créée. Cette classe
ne prend en paramètre que le numéro de séquence pour construire tout le paquet.
¾ Résultat :
Figure 30 : Illustration d’un paquet de PDU unbind créée par une tâche
84
Le paquet obtenu est :
00010000600000006
¾ Discussion :
Les taches construites dans cette API fonctionnent normalement et peuvent être
immédiatement utilisées et appliquées dans un programme.
Ǥ °
¾ Démarche :
Une classe test, qui permet l’instanciation d’une session outbound pour définir et
régir les requêtes sortant de cette session, a été créée.
Le résultat attendu est la construction d’un pdu de type outbind.
¾ Résultat :
Figure 31 : Représentation d’un paquet PDU à envoyer lors d’une session outbound
85
Le paquet obtenu est :
0001e000b000000014d4952494a4103138706f74640
¾ Discussion :
Les taches construites dans cette API fonctionnent normalement et peuvent être
immédiatement utilisées et appliquées dans un programme.
ͶǤǤͳǤ
JMgatewayi OS
nitiator operation
Ǥ
86
Ǥ
L’interface Session est utilisée. Elle est implémentée par l’application pour notifier
si une Opération est complète.
Ǥ
Operation est utilisée pour exécuter des requêtes (par exemple une opération entrée
sortie et l’opération sur le timer) en faveur de l’application.
Quand l’application invoque une opération, les opérations sont exécutées sans l’emprunt
du thread de contrôle de l’application. Cependant, du point de vue en perspective de
l’application, les opérations sont exécutées de manière asynchrone.
Quand ces opérations sont complètes, l’OS opération délègue les notifications au
Dispatcher.
Ǥ
Ǥ
87
Ǥ
±
Quand l’application invoque les opérations sur l’OS_operation, elle les exécute de
manière asynchrone avec le respect des autres opérations d’une autre application. Les
systèmes moderne comme Solaris et Windows NT offre des sous-systèmes
d’entrée/sortie asynchrone avec le noyau.
88
Voici le diagramme de séquence correspondante :
Exécution exécute
de
dispatch
Opération
terminée
Notifier la notification
session
89
De nos jours, les applications à base de SMS est un sujet d’actualité qui peut offrir
des services à valeur ajoutée aux clients et aux opérateurs mobiles.
A partir de la conception d’une API pour l’échange de SMS basée sur le protocole SMPP
3.4, objet même de la présente étude, le programmeur peut désormais créer des
applications ayant la possibilité de communiquer avec un SMSC ou créer une passerelle
SMS, tout en utilisant une API créée à partir de la nouvelle bibliothèque java.nio.
Toutefois, il est important de noter que l’implémentation considérée comporte des
irrégularités au niveau de la phase de test.
90
1. Arnaud Henry LABORDÈRE, Vincent JONACK, « SMS and MMS Interworking
in Mobil Network »
91
1. www.opensmpp.logica.com
2. www.smppapi.sourceforge.net
5. SMPP - http://en.wikipedia.org/wiki/Short_message_peer-to-peer_protocol
12. [UCS UCS-2. ISO/IEC 10646 encoding form: Universal Character Set coded in 2
octets - http://www.unicode.org
92
93
!!"#" $%
&'()"*+"(*,+-*"!*./!0)'/!*+"(*") )(*+"(*("(('/!( (,"0'.'""(
, 1*&"*(2,,*345
!"#$%&' ()*+#, *
Size
Field Name Type Description Ref.
octets
Note:
The short message data
should be inserted in either
the short_message or
message_payload fields.
Both fields must not be used
simultaneously.
OPTIONAL PARAMETERS for SUBMIT_SM
Size
Field Name Type Description Ref.
octets
H
command_length 4 Integer Set to overall length of PDU. 5.1.1
E
A command_id 4 Integer submit_sm_resp 5.1.2
D
E command_status 4 Integer Indicates outcome of 5.1.3
R submit_sm request.
sequence_number 4 Integer Set to sequence number of 5.1.4
original submit_sm PDU.
message_id Var. C- This field contains the SMSC 5.2.23
B max Octet message ID of the submitted
O 9 3365 String message. It may be used at a
D later stage to query the status
Y of a message, cancel or
replace the message.
!!"#" 5%
1",1"("!) )'/! +"*& *0& ((" (2,,09:;<=>?@A<9:+@AB
!!"#" C%
1",1"("!) )'/!*+"*& *0& (("*(DEBF>GB+BG<HB?I)<JB
!!"#" K% 1",1"("!) )'/!*+"*& *0& (("*,?9A9D9G8B?L<9:
!!"#" M% 1",1"("!) )'/!*+"*& *0& (("*8B?L<9:33
!!"#" N% 1",1"("!) )'/!*+"*& *0& (("*8B?L<9:35
!!"#" O% 1",1"("!) )'/!*+"*& *0& (("*,+-
!!"#" $P% 1",1"("!) )'/!*+"*& *0& ((" ,+-QB@FB?
!!"#" $$%*1",1"("!) )'/!*+"*& *0& (("*,+-R9FI
!!"#" $6%
1",1"("!) )'/!*+"(*0& (("(*R<:F)ISB*BA (BLL<9:(A@AB
!!"#" $3%
1",1"("!) )'/!*+"*& *0& (("*R'!+*) (T
!!"#" $%&
'"('")"!* *+,!-."-/ -0/ ))"-)1(()233456)27827
!!"#" $9&
'"('")"!* *+,!-.")-"#"1(/")-."-/ -0/ ))"- :)*' +*"-:+!.
'"(,!)"--"*-."-/;<!"-."-0")-0/ ))")-=+//")
!!"#" $>&
'"('")"!* *+,!- .")- 0/ ))")- 0 !0"/?)1?'")(- "*
@"!"'+0?! 0A
!!"#" $B&
'"('")"!* *+,!- .")- 0/ ))")- )"))+,!?)"'C"'?:,<!.?*#- "*
)"))+,!?0/+"!*?:,<!.?'#
!!"#" $D&
0,."-),<'0"-(,<'-/"-*")*-."-0'" *+,!-.;<!-(.<
!"#$%&'()(*+ #*,-
F,&,,,,,,,,,,,,,,,&GHI;GG&6G>&6JHHGG>&6G&567&9J6K&6LH>&7H&J9MGI
9NH6&;G3GNOG;&,,,,,,,,,,,,,,&,F
FF&GHI;GG&67&PJQNH&6G PRG>SG
>T2%4!*#.%*"$ +%0+=U&UB-
FF&GHI;GG&67&SJI&6G&5L>>G&6G&PRG>SG
$414 )4$*24%5(22E#$:=UXYZYQ[UB-
>T2%4!*#.%*"$ +%0+=U&UB-
FF&GHI;GG&PG&IK5G&6G&PRG>SG
$414 )4$*24%>T2%4!C%T"4=U9J;HGUB-
FF&6G8NHNINJH&6G&PL&OG;>NJH&67&5;JIJ3JPG&7INPN>G&5L;&PRG>SG
$414 )4$*24%IJH=6(%(*Q>SCIJHCLP5_LH7SG;N3B-
$414 )4$*24%H5N=6(%(*Q>SCH5NCHLINJHLPB-
$414 )4$*24%L::$422C$(+?4=6(%(*68PICL66;C;LHQGB-
F,&,,,,,,,,&IG>I&GHOJN&GI&;G3G5INJH&,,,,,,,,,,,&,F
FF&3JH>I;73INJH&67&9788G;&3JHIGHLHI&PG&3J;5>&67&567
$414 )4$*1#+2%$.1%9#:T=B-
FF&NH>ILH3NLINJH&6R7H&J9MGI&567
567&":.D&+4E&567=$414 )4$`XB-
>T2%4!*#.%*"$ +%0+=U&UB-
FF&;GHOJN&PL&PJHQ7G7;&67&567&3;GG
>T2%4!*#.%*"$ +%0+=U&PJHQ7G7;&67&567&3;GG&G>I&GQLPG&L&V
UW":.*?4%567>%$4(!=B*$4!( + +?=BB-
FF&JH&5;GH6&PG&5La7GI&6G&567&3;GG&6LH>&7H&9788G;&5J7;&PRL88N3_G;&GI
5J7;&J9>G;OG;&PG&;G>7PILI
9T%49.\\4$&/.\XD&":.*?4%567>%$4(!=B-
>T2%4!*#.%*"$ +%0+=U&,,,,,,,,,,,,,,&PG&5La7GI&6G&567&3;GG&5J7;&7HG
;Ga7GIG&6G 9NH6&;G3GNOG;&,,,,,,,,,,,,,,UB-
>T2%4!*#.%*"$ +%0+=U&UB-
Eb 04=/.\X*b(2;4!( + +?=BB<
>T2%4!*#.%*"$ +%0+=U&UB-
d
!!"#" $E&
0,."-),<'0"-(,<'-/"-*")*-."-0'" *+,!-.;<!"-* 0F"
!"#$%&'()(*+ #*9T%49.\\4$-
"./0 1&10(22&I42%7H9NH6IL>e<
567&$42.0%D&+.00-
FF&NH>ILH3NLINJH&6R7HG&IL3_G&5J7;&PL&3;GLINJH&6R7HG&;Ga7GIG&6G&567
6G&IK5G&7H9NH6
7H9NH6CI(2f&%(2fD&+4E&7H9NH6CI(2f=gB-
>T2%4!*#.%*"$ +%0+=U&7H9NH6&IL>e&JH&5;J3G>>&UB-
>T2%4!*#.%*"$ +%0+=U&UB-
\=%(2f* 28 + 2b4:=BB<
>T2%4!*#.%*"$ +%0+=U&3JH>I;73I&5L3eGI&567&8NHN>_G6&UB-
$42.0%D&%(2f*?4%;4h.42%=B-
>T2%4!*#.%*"$ +%0+=U&UB-
FF&;G375G;LINJH&67&5La7GI&3JH>I;7NI&5L;&3GIIG&IL3_G
9T%49.\\4$&/.\D&$42.0%*?4%567>%$4(!=B-
>T2%4!*#.%*"$ +%0+=U&UB-
>T2%4!*#.%*"$ +%0+=U&L88N3_LQG&67&5L3eGI&3JH>I;7NI&5L;&3GIIG&IL3_G&UB-
>T2%4!*#.%*"$ +%0+=U&UB-
Eb 04=/.\*b(2;4!( + +?=BB<
d
!!"#" GH&
0,."-),<'0"-(,<'-/"-*")*-."-)+1</ *+,!-.;<!"-)"))+,!
!"#$%&'()(*+ #*9T%49.\\4$-
"./0 1&10(22&IG>IC>G>>NJHCJ7I9J7H6<
FF&NH>ILH3NLINJH&6R7H&J9MGI&6G&IK5G&;G8G;GH3G&a7N&3JHINGHI&PG>
NH8J;SLINJH>&HG3G>>LN;G>&5J7;&NHNING;&7HG&>G>>NJH&6G&IK5G&J7I9J7H6
;4\4$4+14&$4\4$4+14&D&+4E&;4\4$4+14=B-
$4\4$4+14*24%C2T2%4!C :C>S>3=USN;NMLUB-
$4\4$4+14*24%C"(22E#$:C>S>3=UXY"#%:UB-
FF&NH>ILH3NLINJH&67&6NI&>G>>NJH&J7I9J7H6&5J7;&GIL9PN;&7HG
3JHHGiNJH&LOG3&7H&G>SG&5J7;&PL&6GPNO;LH3G&6R7H&SG>>LQG
>S55>422 #+>4$)4$&#.%/#.+:D&+4E&>G>>NJHC>G;OG;CJ7I9J7H6=$4\4$4+14B-
>T2%4!*#.%*"$ +%0+=U&UB-
FF&L88N3_LQG&6G&PL&>NI7LINJH&NHNINLPG&6G&PL&>G>>NJH
>T2%4!*#.%*"$ +%0+=UL88N3_LQG&6G&PL&>NI7LINJH&NHNINLPG&6G&PL&>G>>NJH&V
UW#.%/#.+:*4+h. $4L1% ) %T=BB-
>T2%4!*#.%*"$ +%0+=U&UB-
FF&3JH>I;73INJH&67&567&5L;&7HG&IL3_G&NH>ILH3NG;&6LH>&PL&>G>>NJH&GI
PL&;GIJ7;HG
567&":.D&#.%/#.+:*?4%;4h.42%=B-
9T%49.\\4$&/.\D&":.*?4%567>%$4(!=B-
FF&L88N3_LQG&67&5La7GI&567&a7N&G>I&L7IJ;N>G&L&GI;G&GHOJKG&6LH>&7HG
>G>>NJH&L&PRGILI&J7I9J7H6
>T2%4!*#.%*"$ +%0+=UUB-
>T2%4!*#.%*"$ +%0+=U&L88N3_LQG&67&5La7GI&6R7H&J7I9NH6&UB-
>T2%4!*#.%*"$ +%0+=UUB-
Eb 04=/.\*b(2;4!( + +?=BB<
>T2%4!*#.%*"$ +%=N+%4?4$*%#_4c>%$ +?=/.\*?4%=BBB-
>T2%4!*#.%*"$ +%0+=UUB-
>T2%4!*#.%*"$ +%0+=UUB-
>T2%4!*#.%*"$ +%0+=U&L88N3_LQG&6G&PL&>NI7LINJH&L5;G>&I;LNIGSGHI&6G&PL
>G>>NJH&V&UW#.%/#.+:*4+h. $4L1% ) %T=BB-
>T2%4!*#.%*"$ +%0+=UUB-
d
DEDICACES ...................................................................................................................... 4
REMERCIEMENTS........................................................................................................... 5
SOMMAIRE ....................................................................................................................... 6
BIBLIOGRAPHIE ............................................................................................................ 91
WEBOGRAPHIE ............................................................................................................. 92
ANNEXES ........................................................................................................................ 93