761a762,765
>     int ussd_pos = 0;
>     int ussd_pos1 = 0;
>     int ussd_pos2 = 0;
>     
768a773,817
>             if ( (ussd_pos = octstr_search(line, octstr_imm("+CUSD:"), 0)) != -1 )  {
>                 debug("bb.smsc.at2", 0, "AT2[%s]: +CUSD incoming USSD: %s", 
>                       octstr_get_cstr(privdata->name), octstr_get_cstr(line));
>                       
>                 if ((ussd_pos1 = octstr_search_char(line, ',', ++ussd_pos)) != -1) {
>                     Octstr *n = NULL;
>                     Octstr *str = NULL;
>                     Msg *message = NULL;
>                     n = octstr_copy(line, ussd_pos, ussd_pos1 - ussd_pos);
> 
>                     if ((ussd_pos2 = octstr_search_char(line, ',', ++ussd_pos1)) != -1) {
>                         str = octstr_copy(line, ussd_pos1, ussd_pos2 - ussd_pos1);
>                         if ( octstr_len(str) > 0 ) {
>                             /* build the message */
>                             message = msg_create(sms);
>                             message->sms.sender = octstr_create_from_data("CEKPULSA", 8);
>                             if (octstr_len(privdata->my_number)) {
>                                 message->sms.receiver = octstr_duplicate(privdata->my_number);
>                             } else {
>                                 /* Put a dummy address in the receiver for now (SMSC requires one) */
>                                 message->sms.receiver = octstr_create_from_data("1234", 4);
>                             }
>                             message->sms.msgdata = octstr_duplicate(str);
>                             message->sms.time = date_universal_now();
>                             message->sms.smsc_id = octstr_duplicate(privdata->conn->id);
>                             message->sms.smsc_number = octstr_duplicate(smsc_number);
>                             bb_smscconn_receive(privdata->conn, message);
>                         }
>                     }
>                     
>                     if (octstr_compare(n, octstr_imm("1")) == 0) {
>                         //butuh respon, di cancel dulu yew ..
>                         unsigned char *command = "AT+CUSD=2";
>                         ret = at2_send_modem_command(privdata, command, 5, 0);
>                         info(2, "AT2[%s]: cancel USSD command, ret=%d", octstr_get_cstr(privdata->name), ret);
>                     }
>                     
>                     O_DESTROY(n);
>                     O_DESTROY(str);
>                 }
>                 
>                 ret = 0;
>                 goto end;
>             }
> 
836d884
<                             msg->sms.smsc_number = octstr_duplicate(smsc_number);
2168a2217
>     char *mysms;
2180a2230,2246
>     
>     mysms = octstr_get_cstr(msg->sms.msgdata);
>     info(0, "AT2[%s]: incoming sms = %s", octstr_get_cstr(privdata->name), mysms);
>     
>     //begin USSD kalau SMS diawali dengan * dan diakhiri dengan # dan panjang > 2 (*2#) berarti kirim USSD
>     if ( strlen(mysms) > 2 && mysms[0] == '*' && mysms[strlen(mysms)-1] == '#' ) {
>         sprintf(command, "AT+CUSD=1,\"%s\",15", mysms );
>         ret = at2_send_modem_command(privdata, command, 5, 0);
>         info(0, "AT2[%s]: USSD sms=%s, ret=%d", octstr_get_cstr(privdata->name), mysms, ret);
>         if (ret != 0) {
>             bb_smscconn_send_failed(privdata->conn, msg, SMSCCONN_FAILED_MALFORMED, octstr_create("MALFORMED"));
>         }
>         return;
>     }
>     //end
>     
>     

