Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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));
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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();
        }
    }
}