SMPP

SMPP (İngilizce Short Message Peer to Peer Protocol; Eşler Arası Kısa Mesaj Protokolü), telekominikasyonda, Harici Kısa Mesaj Varlıkları (ESME), Yönlendirme varlıkları (RE) ve Mesaj Merkezleri (SMSC) arasında kısa mesaj verisinin transferi için, esnek bir veri iletişim arayüzünün sağlanması amacıyla tasarlanan, özgür, endüstri standardı olan bir protokoldür. Genellikle üçüncü partilerde(haber organizasyonları gibi) toplu mesaj iletimini sağlamak amacıyla kullanılır. Dolayısıyla, UMTS, IS-95 (CDMA), CDMA2000, ANSI-136 (TDMA) ve iDEN gibi GSM olmayan SMS protokollerine destek verir. SMPP, SS7 ağlarının dışında, kısa mesaj değiş tokuşu için yaygın olarak kullanılır.
Genellikle GSM operatörleri ve katma değerli servis sağlayıcılar arasında toplu SMS gönderimlerinde kullanılır. Bir dış SMS servisi (ESME) SMPP kullanarak TCP/IP veya X.25 üzerinden kendi uygulama katmanında bir Servis Mesajı Merkezi (SMSC) ile SMS alışverişinde bulunabilir.
Tarihçe
SMPP, başlangıçta küçük bir İrlanda şirketi olan ve daha sonra Logica'nın (firma parçalandı ve artık Acision olarak biliniyor) satın aldığı Aldiscon tarafından tasarlandı. Protokol, aslen geliştirici Ian J Chambers tarafından, SMSC'nin mesaj iletimindeki işlevselliğini SS7 kullanmaksızın test edebilmek amacıyla yaratıldı. 1999 yılında, resmen Logica SMPP'yi, önceleri adı SMPP Geliştiricileri Forumu olan, sonra The SMS Forum olarak adlandırılan (artık forum dağıldı) topluluğa teslim etti. SMPP protokolünün teknik özellikleri, 2007 yılı sonunda kapanan SMS Forum'un web sitesi sayesinde halen mevcuttur. SMPP sahipliği, SMS Forum'un dağılması ile tekrar Acision firmasına döndü.
SMPP geliştirimine ara verildi ve SMS forumu dağıldı. SMS forum websitesiden:
Temmuz 31, 2007 - Kar amacı gütmeyen, uluslararası kablosuz iletişim endüstrisinin yararı için, görevi SMS'i (Short Message Service) geliştirme, teşvik etme ve tanıtma olan SMS Forum, 27 Temmuz 2007 tarihi itibarıyla terhis ediliecektir.
Yapılan haberle ilişkili bir basın açıklaması, aynı zamanda bu sitenin kısa bir süre sonra askıya alınacağını uyarmıştı. Bunun aksine site uzun bir süre daha çoğu işlev ve özellikleri sunar durumdaydı (31 Ocak 2012'ye kadar).
SMS Forum'un eski teknik moderatörü ve ağ uzmanı olan Cormac Long'a göre site, çalışmasını durdurdu. SMPP tanımlamaları için Acision ile iletişim kurulması gerekir. Dosyalar ayrıca birçok diğer mevcut sitede mevcut olarak bulunabilir.
SMPP işlevleri
Protokol, PDU'ların (İngilizce Protocol Data Units, protokol veri birimlerinin veya paketlerin) istek/cevap çiftlerinin OSI 4. katmanı bağlantıları (TCP oturumu veya X.25 SVC3) üzerinden takas edilmesine dayanır. PDU'lar verimli olmaları için ikili olarak kodlanmışlardır. Veri takası eş zamanlı olarak yapılabilir: Her eş gönderilecek her PDU için cevap bekler. Asenkron olarak da yapılması mümkündür: çoklu istekler bekleme olmaksızın gönderilebilir ve diğer eş tarafından düzensiz sırayla kabul edilebilir. İsteklere pencere adı verilir; en iyi performans için, iletişimde bulunan taraflar aynı pencere boyutu ile yapılandırılmış olmalıdır.
Desteklediği işlemler
SMPP birçok çift-yönlü mesajlaşma fonksiyonunu destekler:
Bir ya da birden fazla noktaya SMS gönderimi
Servis Mesaj Merkezinden SMS alımı
Gönderilen SMS'ler için durum sorgusu
SMS gönderiminin iptali veya gönderimdeki SMS'in değiştirilmesi
SMS gönderim zamanlaması
Mesaj tipinin (datagram veya depola-ilet) belirlenmesi
SMS öncelik belirlenmesi
Veri kodlama tipinin belirlenmesi
SMSler için geçerlilik süresi belilenmesi
SMS ve servis eşleşmesi (mesela SMSle sesli mesaj uyarısı)
Bağlantı tipleri
SMPP 3 ayrı bağlantı tipi sunar
Gönderici (Transmitter)
Alıcı (Receiver)
Gönderici&Alıcı (Transreceiver) (SMPP 3.4'ten itibaren)
Bir SMPP oturumu 5 ayrı durumda olabilir:
OPEN: Bağlı ve oturum için bekliyor
BOUND_TX: Gönderici (transmitter) olarak bağlı
BOUND_RX: Alıcı (receiver) olarak bağlı. Bu oturum tipinde dış mesaj sistemi (ESME) mesaj merkezinden (SMSC) mesaj almaya hazırdır.
BOUND_TRX: Hem alıcı hem gönderici. Genelde SMS iletim raporları da almak için kullanılır
CLOSED : Oturum kapalı ve bağlı değil.
Fonksiyonlar
Dış SMS sistemi (ESME)'den SMSC'ye şu işlevler geçerlidir:
submit_sm
data_sm
query_sm
cancel_sm
replace_sm
Bu fonksiyonların çağrılmasına karşılık SMSC cevap döner. (submit_sm_resp, cancel_sm_resp)
SMSC'den ESME'ye doğru geçerli işlevler ise :
deliver_sm
data_sm
SMPP Sürümleri
SMPP standardı zaman geçtikçe gelişti. Çokça kullanılan SMPP sürümleri şunlardır:
SMPP 3.3 (en eski kullanılan sürümdür; sadece GSM'i destekler)
SMPP 3.4 (Etiket Uzunluğu Değeri (TLV) parametreleri, GSM olmayan SMS teknolojileri ve telsiz alıcı-verici desteği eklenmiştir (tekil bağlantılar mesajları alabilir ve iletebilir))
SMPP 5.0 (SMPP'nin en son versiyonudur; hücre yayını için destek eklenmiştir)
Geçerli sürüme, bağlama komutundaki interface_version parametresi ile aktarılır.
PDU Biçimi
SMPP PDU'su başlık ile başlar, gövde ile devam eder:
PDU Başlığı
Her PDU bir başlık ile başlar. Başlık 4 alandan oluşur, her alanın uzunluğu 4 oktettir:
Komut Genişliği (command_length): PDU'nun tamamının uzunluğu (komut genişliğinin kendisi de dahil olmak üzere); 16 oktetten küçük veya eşit olmak zorundadır.
Komut ID (command_id): SMPP işlemini (veya komutunu) tanımlar.
Komut Durumu (command_status): İsteklerde her zaman 0 değerini alır; cevaplarda ise, işlemin sonucu ile alakalı bilgiyi tutar.
Dizi ID (sequence_number): SMPP oturumu içerisindeki istekler ve cevaplar arasındaki ilişkiyi belirtmek için kullanılır; asenkron iletişime izin verir (pencereleme).
SMPP'de bütün sayısal alanlar ilk oktetin En Anlamlı Bit (MSB) olduğu, big endian sıralamayı kullanır.
Örnek
Aşağıdaki örnekte 60 oktetlik submit_sm PDU'nun ikili kodlanmış hali bulunmaktadır. 16'lık oktetler halinde gösterilen veri, bu PDU'nun başlığının ve gövdesinin tekil döküm halidir.
Bu, SMPP özelliklerinin, submit_sm PDU'sunun tanımıyla bölge bölge nasıl ikili kodlandığını gösteren en iyi örnektir.
İlk tırnak içindeki terimler bölümün adını(command_length gibi), virgülden sonraki parantez içerisindeki rakamlar ve/veya harfler bölgeye karşılık gelen değeri ((60)), sonraki oktetler ise bu değerlerin ikili karşılığını (... 00 00 00 3C) temsil eder.
PDU Başlığı
'command_length', (60) ... 00 00 00 3C
'command_id', (4) ... 00 00 00 04
'command_status', (0) ... 00 00 00 00
'sequence_number', (5) ... 00 00 00 05
PDU Gövdesi
'service_type', () ... 00
'source_addr_ton', (2) ... 02
'source_addr_npi', (8) ... 08
'source_addr', (555) ... 35 35 35 00
'dest_addr_ton', (1) ... 01
'dest_addr_npi', (1) ... 01
'dest_addr', (555555555) ... 35 35 35 35 35 35 35 35 35 00
'esm_class', (0) ... 00
'protocol_id', (0) ... 00
'priority_flag', (0) ... 00
'schedule_delivery_time', (0) ... 00
'validity_period', (0) ... 00
'registered_delivery', (0) ... 00
'replace_if_present_flag', (0) ... 00
'data_coding', (0) ... 00
'sm_default_msg_id', (0) ... 00
'sm_length', (15) ... 0F
'short_message', (Hello wikipedia) ... 48 65 6C 6C 6F 20 77 69 6B 69 70 65 64 69 61''''
SMPP'nin Tuhaflıkları
Birçok kabuller olmasına rağmen, SMPP birkaç şüpheli özellik barındırır:
GSM 7 bit varsayılan alfabesi için data_coding alanı boş olarak kalır.
data_coding = 0 alanı için standartlaştırılmış bir anlam yoktur.
Shift-JIS kodlaması desteği belirsizdir.
submit_sm_resp alanı SMPP sürümleri arasında uyumsuzluk gösterir.
GSM 7 bit varsayılan alfabesi için data_coding alanı boştur
GSM 03.38'i temel alan SMPP 3.3'te data_coding değerleri bulunmasına rağmen, SMPP 3.4'ten beri GSM 7 bit varsayılan alfabesi için data_coding değeri yoktur.
data_coding = 0 alanı için standartlaştırılmış bir anlam yoktur
SMPP 3.4 ve 5.0'a göre data_coding = 0, "SMSC Varsayılan Alfabesi" anlamına gelir. SMSC'nin türüne ve yapılandırmasına bağlı olarak kodlamaya tabi tutulduğunda gerçekten bu anlamı verir.
Shift-JIS kodlaması desteği belirsizdir
CDMA'daki C. R1001 standardı kodlamalardan biri olan Shift-JIS Japonca için kullanılır. SMPP 3.4 ve 5.0 Japonca için üç kodlama tanımlar (JIS, ISO-2022-JP ve Genişletilmiş Kanji JIS), fakat hiçbiri CDMA MSG_ENCODING 00101 ile tanımlanamaz. SMPP'deki Shift-JIS'de mesajları taşımak için Piktogram kodlama (data_coding = 9) kullanılır.
submit_sm_resp alanı SMPP sürümleri arasında uyumsuzluk gösterir
submit_sm başarısız olduğunda SMSC, sıfır olmayan bir command_status'un değeri ve "empty" message_id ile bir submit_sm_resp döndürür.