int main () { // Make the PDU string from a mesage text and destination phone number. // The destination variable pdu has to be big enough. // alphabet indicates the character set of the message. // flash_sms enables the flash flag. // mode select the pdu version (old or new). // if udh is true, then udh_data contains the optional user data header in hex dump, example: "05 00 03 AF 02 01" // void make_pdu( // char* number, char* message, int messagelen, int alphabet, int // flash_sms, int report, int udh, char* udh_data, char* mode, char* pdu, // int validity, int replace_msg, int system_msg, int number_type, char // *smsc // ); char pdu[4096]; char *phone_number = "06709405300"; char *message = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzmmmmmmmmmm"; make_pdu( phone_number, message, strlen(message), ALPHABET_GSM, 0, // flash 1, // report 0, // udh NULL, // udh_data "new", // mode ("old" vagy "new") pdu, 0, // validity 0, // replace_msg 0, // system_msg (0 vagy 1 vagy 2) 0, // number_type NULL // char *smsc ); printf("%s\n", pdu); return 0; }
int main(int argc, char **argv) { struct timeval tv; coap_pdu_t *pdu; coap_session_t *session; struct sigaction sa; if ( argc > 1 && strncmp(argv[1], "-h", 2) == 0 ) { usage( argv[0] ); exit( 1 ); } session = get_session(argc > 1 ? argv[1] : "::1"); if ( !session ) return -1; id = rand() & INT_MAX; memset (&sa, 0, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_handler = handle_sigint; sa.sa_flags = 0; sigaction (SIGINT, &sa, NULL); sigaction (SIGTERM, &sa, NULL); while ( !quit ) { if (! (pdu = make_pdu( rand() & 0xfff ) ) ) break; coap_send(session, pdu); tv.tv_sec = 5; tv.tv_usec = 0; select( 0, 0, 0, 0, &tv ); } coap_free_context( session->context ); return 0; }
/* send sms */ int putsms( struct sms_msg *sms_messg, struct modem *mdm) { char command[500]; char command2[500]; char answer[500]; char pdu[500]; int clen,clen2; int retries; int err_code; int pdu_len; int sms_id; pdu_len = make_pdu(sms_messg, mdm, pdu); if (mdm->mode==MODE_OLD) clen = sprintf(command,"AT+CMGS=%i\r",pdu_len/2); else if (mdm->mode==MODE_ASCII) clen = sprintf(command,"AT+CMGS=\"+%.*s\"\r",sms_messg->to.len, sms_messg->to.s); else clen = sprintf(command,"AT+CMGS=%i\r",pdu_len/2-1); if (mdm->mode==MODE_ASCII) clen2=sprintf(command2,"%.*s\x1A",sms_messg->text.len, sms_messg->text.s); else clen2=sprintf(command2,"%.*s\x1A",pdu_len,pdu); sms_id = 0; for(err_code=0,retries=0;err_code<2 && retries<mdm->retry; retries++) { if (put_command(mdm,command,clen,answer,sizeof(answer),50,"\r\n> ") && put_command(mdm,command2,clen2,answer,sizeof(answer),1000,0) && strstr(answer,"OK") ) { /* no error during sending and the modem said OK */ err_code = 2; /* if reports were request, we have to fetch the sms id from the modem reply to keep trace of the status reports */ if (sms_report_type!=NO_REPORT) { sms_id = fetch_sms_id(answer); if (sms_id==-1) err_code = 1; } } else { /* we have an error */ if (checkmodem(mdm)==-1) { err_code = 0; LOG(L_WARN,"WARNING: putsms: resending last sms! \n"); } else if (err_code==0) { LOG(L_WARN,"WARNING: putsms :possible corrupted sms." " Let's try again!\n"); err_code = 1; }else { LOG(L_ERR,"ERROR: We have a FUBAR sms!! drop it!\n"); err_code = 3; } } } if (err_code==0) LOG(L_WARN,"WARNNING: something spuky is going on with the modem!" " Re-inited and re-tried for %d times without success!\n", mdm->retry); return (err_code==0?-2:(err_code==2?sms_id:-1)); }
static channel_data * redundancy_encoder_output(red_enc_state *re, uint32_t upp) { struct s_pb_iterator *pbm; channel_data *cd_coded[RED_MAX_LAYERS], *cd_out; uint32_t offset ; int i, j, layers, success = 0, used = 0; pbm = re->media_pos; pb_iterator_ffwd(pbm); /*** Stage 1: Packing coded audio units ******************************/ /* Rewind iterator to start of first pdu */ for(i = 1; (uint32_t)i < upp; i++) { success = pb_iterator_retreat(pbm); assert(success); } offset = 0; layers = 0; for (i = 0; (uint32_t)i < re->n_layers; i++) { if (re->units_ready <= re->layer[i].pkts_off * upp) { break; } /* Move back to start of this layer */ while (offset < re->layer[i].pkts_off * upp) { success = pb_iterator_retreat(pbm); if (success == FALSE) break; offset++; } xmemchk(); /* need upp data elements + 1 for state */ channel_data_create(&cd_coded[i], upp + 1); success = make_pdu(pbm, upp, re->layer[i].cid, cd_coded[i]); /* make_pdu may fail because coding not available */ if (success == FALSE) { channel_data_destroy(&cd_coded[i], sizeof(channel_data)); break; } layers++; } #ifdef DEBUG_REDUNDANCY debug_msg("end of data collection\n"); #endif /* DEBUG_REDUNDANCY */ assert(layers != 0); /* Create channel_data unit that will get output */ channel_data_create(&cd_out, layers * (upp + 1) + re->n_layers); /*** Stage 2: Packing redundancy headers *****************************/ used = 0; if ((uint32_t)layers != re->n_layers) { /* Add max offset if we didn't make all units */ add_hdr(cd_out->elem[used], RED_EXTRA, re->layer[re->n_layers - 1].cid, re->layer[re->n_layers - 1].pkts_off * upp, 0); used++; } i = layers - 1; while (i > 0) { add_hdr(cd_out->elem[used], RED_EXTRA, re->layer[re->n_layers - 1].cid, re->layer[re->n_layers - 1].pkts_off * upp, channel_data_bytes(cd_coded[i])); used++; i--; } add_hdr(cd_out->elem[used], RED_PRIMARY, re->layer[0].cid, re->layer[0].pkts_off * upp, 0); used++; /*** Stage 3: Transfering coded units into output unit ***************/ for(i = layers - 1; i >= 0; i--) { for (j = 0; j < cd_coded[i]->nelem && cd_coded[i]->elem[j]->data != NULL; j++) { cd_out->elem[used]->data = cd_coded[i]->elem[j]->data; cd_out->elem[used]->data_len = cd_coded[i]->elem[j]->data_len; cd_coded[i]->elem[j]->data = NULL; cd_coded[i]->elem[j]->data_len = 0; used++; assert(used <= cd_out->nelem); } assert(used <= cd_out->nelem); channel_data_destroy(&cd_coded[i], sizeof(channel_data)); } pb_iterator_audit(pbm, re->history); /* Clear old rubbish */ return cd_out; }
void EditMessageDialog::slotOK() { KAlcatelApp *theApp=(KAlcatelApp *) parentWidget(); int sent = 0, written = 0; int failed = 0, s_failed = 0, w_failed = 0; int i; QString msg; char pdu[1024]; QStringList list = QStringList::split(QRegExp("[; ,]"), sendToCombo->currentText(), false); if (list.count() == 0 && sendCheck->isChecked()) { KMessageBox::error(this, i18n("You must enter at least one phone number to send message!"), i18n("Error")); return; } if(messageEdit->text().isEmpty()) { KMessageBox::error(this, i18n("You must enter at least one character of text!"), i18n("Error")); return; } if (theApp->modemConnect()) { if (list.count() == 0) { make_pdu("", messageEdit->text().latin1(), 1, classCombo->currentItem(), pdu); i = put_message(pdu, (typeCombo->currentItem() == 0) ? MESSAGE_SENT : MESSAGE_UNSENT); if (i == -1) { msg.append(i18n("Writing message failed!<br>")); w_failed++; failed++; } else { msg.append(i18n("Message written, position=%1<br>").arg(i)); written++; } } else { for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { if ((*it).find(PhoneNumberValidator::phoneNumberRegExp, 0) == -1) { KMessageBox::error(this, i18n("%1 doesn't look like phone number!").arg(*it), i18n("Error")); msg.append(i18n("%1 doesn't look like phone number!").arg(*it).append("<br>")); failed++; } else { make_pdu((*it).latin1(), messageEdit->text().latin1(), 1, classCombo->currentItem(), pdu); if (sendCheck->isChecked() && writeCheck->isChecked()){ i = put_message(pdu, (typeCombo->currentItem() == 0) ? MESSAGE_SENT : MESSAGE_UNSENT); if (i == -1) { msg.append(i18n("Writing message for number %1 failed!<br>").arg(*it)); w_failed++; failed++; } else { msg.append(i18n("Message written for number %1, position=%2<br>").arg(*it).arg(i)); written++; } i = send_message(i); if (i == -1) { msg.append(i18n("Sending to number %1 failed!<br>").arg(*it)); s_failed++; failed++; } else { msg.append(i18n("Message sent to number %1, reference id=%2<br>").arg(*it).arg(i)); sent++; } } else if (writeCheck->isChecked()){ i = put_message(pdu, (typeCombo->currentItem() == 0) ? MESSAGE_SENT : MESSAGE_UNSENT); if (i == -1) { msg.append(i18n("Writing message for number %1 failed!<br>").arg(*it)); w_failed++; failed++; } else { msg.append(i18n("Message written for number %1, position=%2<br>").arg(*it).arg(i)); written++; } } else if (sendCheck->isChecked()){ i = send_message(pdu); if (i == -1) { msg.append(i18n("Sending to number %1 failed!<br>").arg(*it)); s_failed++; failed++; } else { msg.append(i18n("Message sent to number %1, reference id=%2<br>").arg(*it).arg(i)); sent++; } } } } } theApp->modemDisconnect(); msg.prepend(i18n("<br><b>Detailed list:</b><br>")); if (failed == 0) { if (sendCheck->isChecked()){ msg.prepend(i18n("Sent all %1 message(s).<br>").arg(sent)); } if (writeCheck->isChecked()){ msg.prepend(i18n("Written all %1 message(s).<br>").arg(written)); } KMessageBox::information(this,msg); accept(); } else { if (sendCheck->isChecked()){ msg.prepend(i18n("Sent %1 message(s), %2 failed during sending.<br>").arg(sent).arg(s_failed)); } if (writeCheck->isChecked()){ msg.prepend(i18n("Written %1 message(s), %2 failed during writing.<br>").arg(written).arg(w_failed)); } msg.prepend(i18n("%1 message(s) failed!<br>").arg(failed)); if (KMessageBox::questionYesNo(this,msg.append(i18n("<br>Do you want to edit that message again?"))) == KMessageBox::No) accept(); } } }