Thông thƣờng mỗi SMS có độ dài tối da 160 ký tự với mã hoá 7-bit. Các SMS với mã hoá 8-bit có độ dài tối đa 140 ký tự và thƣờng là những SMS thông minh chứa hình ảnh và nhạc chuông hoặc là các thiết lập WAP. Các SMS chứa thông điệp gồm các ký tự Unicode 16-bit (UCS2) có độ dài tối đa 70 ký tự. Các SMS có độ dài lớn hơn độ dài tối đa vẫn có thể đƣợc truyền tải dƣới dạng ghép nối nhiều SMS phân đoạn với độ dài chuẩn. SMS có thể phân chia thành các loại sau: SMS-SUBMIT, SMS- DELIVERY, SMS-STATUS-REPORT, SMS-SUBMIT-REPORT, SMS-DELIVERY- REPORT, SMS-COMMAND. Cấu trúc của một SMS đƣợc mô tả chi tiết theo từng loại. Có thể biết đƣợc lý do gửi nhận SMS không thành công thông qua hai loại SMS sau cùng.
Khi dùng chế độ PDU, thông tin đƣợc mã hoá với 7-bit (septet) thƣờng đƣợc mã hoá thành những octet để gửi đi. Và khi nhận, cần phải giải mã nó để hiển thị nội dung SMS cho ngƣời dùng. Sau đây là ví dụ mã hoá thông điệp “hello” gồm 5 ký tự 7 bit thành các octet.
Bảng 3.2. Mã hoã chuỗi dữ liệu bộ bảy (septet) thành chuỗi bộ tám (octet)
Ký tự h e l l o Decimal 104 101 108 108 111 Hex 0x68 0x65 0x6C 0x6C 0x6F Septet 1101000 1100101 1101100 1101100 1101111 8 bit 11101000 00110010 10011011 11111101 00000110 Octet E8 32 9B FD 06
53
Thông điệp “hello” đƣợc mã hoá thành E8329BFD06 bằng cách chuyển số lƣợng bit cần thiết từ cuối ký tự kế sau (bôi đậm) ở dạng mã hoá septet sang đầu của ký tự kế trƣớc để có thể tạo thành một octet 8-bit. Đối với ký tự „o‟ cuối cùng do không còn ký tự nào đứng sau nữa nên đƣợc thêm 5-bit có giá trị 0 vào trƣớc để tạo thành một octet.
Để giải mã thông tin dữ liệu đƣợc mã hoá dƣới định dạng PDU chúng ta hãy xem xét thông điệp “hello” nhƣ sau: Trƣớc tiên, chúng ta sẽ chuyển 1 bit đầu octet đầu tiên sang phía sau của octet thứ hai và bỏ đi 2 bit đầu của octet thứ hai. Làm theo cách tƣơng tự và khi tới octet cuối cùng (06) sẽ đƣợc thêm 4 bit (1111) từ octet trƣớc đó vào sau và bỏ đi 5 bit (00000) đầu tiên.
Bảng 3.3. Mã hoã chuỗi dữ liệu bộ tám (octet) thành chuỗi bộ bảy (septet)
Octet E8 32 9B FD 06
8-bit 11101000 00110010 10011011 11111101 00000110 Septet 1101000 1100101 1101100 1101100 1101111
Decimal 104 101 108 108 111
Ký tự h e l l o
Để xử lý SMS đƣợc đúng, đầu tiên phải xác định đó là loại SMS nào dựa vào lệnh đọc SMS từ mục nào và 2 bit số 0, 1 của octet đầu tiên (00 – SMS-DELIVER, 00 – SMS-DELIVER-REP, 10 – SMS-STATUS-REP, 10 – SMS-COMMAND, 01 – SMS-SUBMIT, 01 – SMS-SUBMIT-REP). Tuỳ theo cấu trúc của từng loại SMS, phân tích và so sánh SMS-SUBMT/SMS-SUBMIT-REP và SMS-DELIVER/SMS- DELIVER-REP theo từng cặp để kiểm tra độ chính xác khi gửi nhận. Tƣơng tự, SMS- SUBMIT/SMS-STATUS-REP để kiểm tra SMS đã đƣợc nhận thành công hay chƣa. Đối với SMS–SUBMIT, không cần các octet chứa thông tin về Trung tâm Dịch vụ Tin nhắn (SMSC) khi gửi SMS. Thay vào đó, octet độ dài của thông tin về SMSC sẽ chứa giá trị 0x00 vì thông tin về SMSC đã đƣợc cài đặt trong mô-đem. Và octet đó sẽ không đƣợc tính vào tổng số octet khi gửi SMS đến mô-đem. Tuy nhiên, thông tin này thƣờng đƣợc kèm theo khi đọc PDU của SMS đã gửi từ mô-đem. Ví dụ, thông điệp “hello” đƣợc gửi từ số điện thoại +84974610987 trong chế độ PDU là 06 91 4819200050 21 00 0C 91 4879640189F7 00 00 05 E8329BFD06 đƣợc phân tích nhƣ
sau:
Bảng 3.4: Cấu trúc cơ bản tin nhắn PDU Mode
Thông số OCTET Chú thích
Header
SMSC Info
06
Độ dài của thông tin về SMSC là 6 octet, bao gồm kiểu và số điện thoại
91 Kiểu số điện thoại quốc tế 4819200050 Số điện thoại của SMSC là
54
Thông số OCTET Chú thích
+8491020005
PDU Stri
ng
First Octet 21 SMS–SUBMIT, 0x21 = 0010
0001 TP–Message–Reference 00
TP–Recipient–Address
0C Độ dài của số điện thoại là 12 chữ số
91 Kiểu số điện thoại quốc tế 4879640189F7 Số điện thoại của ngƣời gửi là
+84974610987 TP–Protocol–Identifier 00 SMS thông thƣờng TP–Data–Coding–Scheme 00
Mã hóa dữ liệu theo bảng chữ cái 7 bit. Nếu là 04 ứng với 8 bit, 08 ứng với UCS2
TP–User–Data–Length 05 Độ dài dữ liệu ngƣời dùng là 0x05 septet
TP–User–Data E8329BFD06 Dữ liệu ngƣời dùng: hello
Số điện thoại và thời gian đƣợc mã hoá dƣới dạng semi-octet đảo ngƣợc theo từng cặp 84 97 46 10 98 7 thành 48 79 64 01 89 F7. Nếu octet kiểu số điện thoại có giá trị 81, số điện thoại sẽ là 0974610987. Nếu số chữ số của số điện thoại là 11 số thì F sẽ đƣợc thêm vào số điện thoại (4879640189F7).
Báo cáo trạng thái SMS đƣợc gửi có từ định danh trong chế độ văn bản là:
+CMGL:23,"RECUNREAD",6,136,"08/08/07,00:54:54+28","08/08/07,00:54:54+28"
,0 và trong chế độ PDU có dạng nhƣ sau: 06 91 4819200050 06 88 0C 91
4879640189F7 808070 00454582 808070 00454582 00. MCDVSMS có thể xác định
một SMS gửi đi đã đƣợc nhận thành công hay chƣa dựa vào từ định danh n=0x88 (13610) mà lệnh AT+CMGS đã trả lại khi gửi SMS và giá trị của TP-Status. TP-Status = 00 có nghĩa ngƣời nhận đã nhận SMS, 01 – không thể xác định đã nhận. Và SMS với thông điệp “hello” nhận từ số điện thoại +84974610987 trong chế độ văn bản:
+CMGL: 5,"REC UNREAD","+84974610987","08/08/07,00:04:29+28",hello còn
trong chế độ PDU sẽ là: 06 91 4819200050 24 0C 91 4879640189F7 00 00 808070
00409282 05 E8329BFD06. Trong đó E8329BFD06 chính là nội dung “hello” đã đƣợc
gửi đi.