1 #include <gammu-message.h>
2 #include "test_helper.h"
3 #include "../../libgammu/phone/at/atgen.h"
4 #include "../../libgammu/gsmstate.h"
5
is_empty(const char * buffer,const int length)6 int is_empty(const char *buffer, const int length)
7 {
8 int i;
9
10 if(buffer != NULL && length > 0)
11 for(i = 0; i < length; ++i)
12 if(buffer[i] != '\0')
13 return FALSE;
14
15 return TRUE;
16 }
17
IncomingSMS(GSM_StateMachine * s,GSM_SMSMessage * sms,void * user_data)18 void IncomingSMS(GSM_StateMachine * s, GSM_SMSMessage *sms, void *user_data)
19 {
20 if(user_data != NULL)
21 memcpy(user_data, sms, sizeof(GSM_SMSMessage));
22 }
23
ignore_if_incoming_sms_disabled(void)24 void ignore_if_incoming_sms_disabled(void)
25 {
26 GSM_Error error;
27 GSM_SMSMessage sms;
28 GSM_StateMachine *s = setup_state_machine();
29 GSM_Phone_ATGENData *Priv = setup_at_engine(s);
30 GSM_Protocol_Message msg;
31
32 const char *event = "+CDS:25\rBAD\r";
33 const char *responses[] = { "ERROR\r\n" };
34 SET_RESPONSES(responses);
35 bind_response_handling(s);
36
37 puts(__func__);
38
39 UNNEEDED(Priv);
40
41 memset(&sms, 0, sizeof(sms));
42 s->Phone.Data.EnableIncomingSMS = FALSE;
43 s->Phone.Data.RequestID = ID_None;
44 s->User.IncomingSMS = &IncomingSMS;
45 s->User.IncomingSMSUserData = &sms;
46
47 msg.Length = strlen(event);
48 msg.Buffer = (char*)event;
49 msg.Type = 0;
50
51 s->Phone.Data.RequestMsg = &msg;
52 error = ATGEN_DispatchMessage(s);
53 test_result(error == ERR_NONE);
54 test_result(is_empty((char*)&sms, sizeof(sms)));
55
56 cleanup_state_machine(s);
57 }
58
ignore_if_no_cds_handler(void)59 void ignore_if_no_cds_handler(void)
60 {
61 GSM_Error error;
62 GSM_SMSMessage sms;
63 GSM_StateMachine *s = setup_state_machine();
64 GSM_Phone_ATGENData *Priv = setup_at_engine(s);
65 GSM_Protocol_Message msg;
66
67 const char *event = "+CDS:25\rBAD\r";
68 const char *responses[] = { "ERROR\r\n" };
69 SET_RESPONSES(responses);
70 bind_response_handling(s);
71
72 puts(__func__);
73
74 UNNEEDED(Priv);
75
76 memset(&sms, 0, sizeof(sms));
77 s->Phone.Data.EnableIncomingSMS = TRUE;
78 s->Phone.Data.RequestID = ID_None;
79
80 msg.Length = strlen(event);
81 msg.Buffer = (char*)event;
82 msg.Type = 0;
83
84 s->Phone.Data.RequestMsg = &msg;
85 error = ATGEN_DispatchMessage(s);
86 test_result(error == ERR_NONE);
87 test_result(is_empty((char*)&sms, sizeof(sms)));
88
89 cleanup_state_machine(s);
90 }
91
process_cds(void)92 void process_cds(void)
93 {
94 GSM_Error error;
95 GSM_SMSMessage sms;
96 GSM_StateMachine *s = setup_state_machine();
97 GSM_Phone_ATGENData *Priv = setup_at_engine(s);
98 GSM_Protocol_Message msg;
99
100 const char *event = "+CDS:25\r07914875215652F006360B914892347527F3817003018104808170030181448000\r";
101 const char *responses[] = { "ERROR\r\n" };
102 SET_RESPONSES(responses);
103 bind_response_handling(s);
104
105 puts(__func__);
106
107 UNNEEDED(Priv);
108
109 memset(&sms, 0, sizeof(sms));
110 s->Phone.Data.EnableIncomingSMS = TRUE;
111 s->Phone.Data.RequestID = ID_None;
112 s->User.IncomingSMS = &IncomingSMS;
113 s->User.IncomingSMSUserData = &sms;
114
115 msg.Length = strlen(event);
116 msg.Buffer = (char*)event;
117 msg.Type = 0;
118
119 s->Phone.Data.RequestMsg = &msg;
120 error = ATGEN_DispatchMessage(s);
121 test_result(error == ERR_NONE);
122 test_result(sms.PDU == SMS_Status_Report);
123
124 cleanup_state_machine(s);
125 }
126
main(void)127 int main(void)
128 {
129 ignore_if_incoming_sms_disabled();
130 ignore_if_no_cds_handler();
131 process_cds();
132 }