| /* |
| * (C) 2008 by Daniel Willmann <daniel@totalueberwachung.de> |
| * All Rights Reserved |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License along |
| * with this program; if not, write to the Free Software Foundation, Inc., |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <sys/types.h> |
| #include <openbsc/debug.h> |
| #include <openbsc/msgb.h> |
| #include <openbsc/gsm_04_11.h> |
| #include <openbsc/gsm_04_08.h> |
| #include <openbsc/gsm_utils.h> |
| |
| /* SMS data from MS starting with layer 3 header */ |
| static u_int8_t sms1[] = { |
| 0x39, 0x01, 0x1a, 0x00, 0x01, 0x00, 0x07, 0x91, 0x55, 0x11, |
| 0x18, 0x31, 0x28, 0x00, 0x0e, 0x31, 0x20, 0x04, 0x81, 0x21, |
| 0x43, 0x00, 0x00, 0xff, 0x04, 0xd4, 0xf2, 0x9c, 0x0e |
| }; |
| |
| static u_int8_t sms2[] = { |
| 0x09, 0x01, 0x9c, 0x00, 0xda, 0x00, 0x07, 0x91, 0x88, 0x96, 0x13, |
| 0x00, 0x00, 0x99, 0x90, 0x11, 0x7b, 0x04, 0x81, 0x22, 0x22, 0x00, |
| 0x08, 0xff, 0x86, 0x6c, 0x38, 0x8c, 0x50, 0x92, 0x80, 0x88, 0x4c, |
| 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x41, 0x6a, 0x19, 0x67, 0x03, 0x74, |
| 0x06, 0x8c, 0xa1, 0x7d, 0xb2, 0x00, 0x20, 0x00, 0x20, 0x51, 0x68, |
| 0x74, 0x03, 0x99, 0x96, 0x52, 0x75, 0x7d, 0xb2, 0x8d, 0xef, 0x6a, |
| 0x19, 0x67, 0x03, 0xff, 0x0c, 0x6a, 0x19, 0x67, 0x03, 0x96, 0xf6, |
| 0x98, 0xa8, 0x96, 0xaa, 0xff, 0x01, 0x8b, 0x93, 0x60, 0xa8, 0x80, |
| 0x70, 0x66, 0x0e, 0x51, 0x32, 0x84, 0xc4, 0xff, 0x0c, 0x97, 0x48, |
| 0x6d, 0x3b, 0x62, 0x95, 0x8c, 0xc7, 0xff, 0x01, 0x73, 0xfe, 0x57, |
| 0x28, 0x52, 0xa0, 0x51, 0x65, 0x90, 0x01, 0x96, 0x50, 0x91, 0xcf, |
| 0x59, 0x27, 0x80, 0x6f, 0x76, 0xdf, 0x6d, 0x0b, 0x57, 0xfa, 0x96, |
| 0x8a, 0x91, 0x77, 0x5e, 0x63, 0x53, 0x61, 0xff, 0x0c, 0x8a, 0xcb, |
| 0x4e, 0x0a, 0x7d, 0xb2, 0x64, 0x1c, 0x5c, 0x0b, 0x30, 0x0c, 0x6a, |
| 0x19, 0x67, 0x03, 0x30, 0x0d |
| }; |
| |
| struct sms_datum { |
| u_int8_t len; |
| u_int8_t *data; |
| }; |
| |
| static struct sms_datum sms_data[] = { |
| { |
| .len = sizeof(sms1), |
| .data = sms1, |
| }, { |
| .len = sizeof(sms2), |
| .data = sms2, |
| } |
| }; |
| |
| #define SMS_NUM (sizeof(sms_data)/sizeof(sms_data[0])) |
| |
| int main(int argc, char** argv) |
| { |
| DEBUGP(DSMS, "SMS testing\n"); |
| struct msgb *msg; |
| u_int8_t *sms; |
| u_int8_t i; |
| |
| /* test 7-bit coding/decoding */ |
| const char *input = "test text"; |
| u_int8_t length; |
| u_int8_t coded[256]; |
| char result[256]; |
| |
| length = gsm_7bit_encode(coded, input); |
| gsm_7bit_decode(result, coded, length); |
| if (strcmp(result, input) != 0) { |
| printf("7 Bit coding failed... life sucks\n"); |
| printf("Wanted: '%s' got '%s'\n", input, result); |
| } |
| |
| for(i=0;i<SMS_NUM;i++) { |
| /* Setup SMS msgb */ |
| msg = msgb_alloc(sms_data[i].len, "SMS"); |
| sms = msgb_put(msg, sms_data[i].len); |
| |
| memcpy(sms, sms_data[i].data, sms_data[i].len); |
| msg->l3h = sms; |
| |
| gsm0411_rcv_sms(msg); |
| msgb_free(msg); |
| } |
| |
| gsm411_send_sms_lchan(0, 0); |
| } |
| |
| /* stubs */ |
| void input_event(void) {} |
| void nm_state_event(void) {} |