Hi Colin,

Your patches are currently being reviewed by the commiters. Just be patient :)
btw, thanks for your work/contribution. I hope the 4.6 specs helps you a lot.

regards

Vincent.

--
Telemaque - 06200 NICE - (FR)
Service Technique/Reseau - NOC 
Developpement SMS/MMS/Kiosques
http://www.telemaque.fr/
[EMAIL PROTECTED]
Tel : +33 4 93 97 71 64 (fax 68)

----- Original Message ----- 
From: "Colin Pitrat" <[EMAIL PROTECTED]>
To: "Kannel Devel" <devel@kannel.org>
Sent: Wednesday, August 23, 2006 3:48 PM
Subject: [PATCH] Some modifs on EMI UCP


Hi,
here are some modifications I made to EMI UCP. The patch should be 
applied only if the previous patches I sent are applied before. This 
patch just adds a skeleton for the answer to 02, 03, 57 and 58 ot and 
move the code that produce the SM field for the answer to 0x ot in a 
function.

I'm currently running some conformity tests on kannel for EMI UCP, and 
I'd like to add the missing functionalities, but it seems like there's 
not a lot of commit on CVS for a long time. Will all the patches that 
have been sent for the last months be applied ?

Regards,
-- 
Colin Pitrat (Bull Services Telco)
Bull,  Architect of an Open World (TM)
Tél : +33 (0)  1 30 80 72 93
www.bull.com



--------------------------------------------------------------------------------


> diff -ur gateway/gw/smsc/emimsg.c gateway-new/gw/smsc/emimsg.c
> --- gateway/gw/smsc/emimsg.c 2005-02-11 16:35:48.000000000 +0100
> +++ gateway-new/gw/smsc/emimsg.c 2006-08-23 15:26:57.000000000 +0200
> @@ -113,11 +113,17 @@
>     switch (ot) {
>     case 01:
>  return SZ01;
> +    case 02:
> + return SZ02;
> +    case 03:
> + return SZ03;
>     case 31:
>  return 2;
>     case 51:
>     case 52:
>     case 53:
> +    case 57:
> +    case 58:
>  return SZ50;
>     case 60:
>  return SZ60;
> @@ -133,12 +139,16 @@
> {
>     switch(ot) {
>     case 01:
> +    case 02:
> +    case 03:
>  return posit ? 2 : 3;
>     case 31:
>  return posit ? 2 : 3;
>     case 51:
>     case 52:
>     case 53:
> +    case 57:
> +    case 58:
>  return 3;
>     case 60:
>  return posit ? 2 : 3;
> diff -ur gateway/gw/smsc/emimsg.h gateway-new/gw/smsc/emimsg.h
> --- gateway/gw/smsc/emimsg.h 2005-02-11 16:35:48.000000000 +0100
> +++ gateway-new/gw/smsc/emimsg.h 2006-08-23 15:26:22.000000000 +0200
> @@ -81,6 +81,13 @@
>     E01_ADC, E01_OADC, E01_AC, E01_MT, E01_AMSG, SZ01
> };
> 
> +enum {
> +    E02_NPL, E02_RAD, E02_OADC, E02_AC, E02_MT, E02_AMSG, SZ02
> +};
> +
> +enum {
> +    E03_RAD, E03_OADC, E03_AC, E03_NPL, E03_RP, E03_PR, E03_LPR, E03_UR, 
> E03_LUR, E03_RC, E03_LRC, E03_DD, E03_DDT, E03_MT, E03_AMSG, SZ03
> +};
> 
> /* All the 50-series messages have the same number of fields */
> enum {
> diff -ur gateway/gw/smsc/smsc_emi.c gateway-new/gw/smsc/smsc_emi.c
> --- gateway/gw/smsc/smsc_emi.c 2006-08-18 15:53:59.000000000 +0200
> +++ gateway-new/gw/smsc/smsc_emi.c 2006-08-23 15:31:35.000000000 +0200
> @@ -159,6 +159,35 @@
>  (PRIVDATA(conn)->keepalive > 0) && \
>  (time(NULL) > (PRIVDATA(conn)->last_activity_time + 
> PRIVDATA(conn)->keepalive)))
> 
> +/* 
> + * Create the SM field for operation 0x :
> + * an Octstr * of the form "Adc:SCTS" with : 
> + * AdC = Address code recipient, max 16 digits
> + * SCTS = Service center time stamp DDMMYYhhmmss
> + */
> +Octstr *create_0x_SM_field(Octstr *AdC)
> +{
> +    time_t t_time;
> +    struct tm tm_time;
> +    // 13 because the timestamp format is DDMMYYhhmmss
> +    char timestamp[13];
> +    Octstr *separator;
> +    Octstr *tmpstr;
> +    Octstr *tmpstr2;
> +    Octstr *result;
> +
> +    separator = octstr_create(":");
> +    tmpstr = octstr_cat(AdC, separator);
> +    time(&t_time);
> +    gw_strftime(timestamp, sizeof(timestamp), "%d%m%y%H%M%S", 
> localtime_r(&t_time, &tm_time));
> +    tmpstr2 = octstr_create(timestamp);
> +    result = octstr_cat(tmpstr, tmpstr2);
> +    octstr_destroy(tmpstr);
> +    octstr_destroy(tmpstr2);
> +    octstr_destroy(separator);
> +    return result;
> +}
> +
> /*
>  * Send an EMI message and update the last_activity_time field.
>  */
> @@ -596,6 +625,10 @@
>  switch(octstr_get_char(emimsg->fields[E01_MT], 0))
>  {
>      case '2':
> + /* 
> + * Bull, Colin Pitrat, 18/08/2006 :
> + * Not handling MT=2 (Numeric message)
> + */
>  if (emimsg->fields[E01_AMSG] == NULL)
>      emimsg->fields[E01_AMSG] = octstr_create("");
>  msg->sms.msgdata = emimsg->fields[E01_AMSG];
> @@ -653,29 +686,7 @@
>  msg->sms.smsc_id = octstr_duplicate(conn->id);
>  bb_smscconn_receive(conn, msg);
>  reply = emimsg_create_reply(01, emimsg->trn, 1, privdata->name);
> - /* 
> - * Reply should contain SM as field 2 which is AdC:SCTS with :
> - * AdC = Address code recipient, max 16 digits
> - * SCTS = Service center time stamp DDMMYYhhmmss
> - */
> - {
> -     time_t t_time;
> -     struct tm tm_time;
> -     // 13 because the timestamp format is DDMMYYhhmmss
> -     char timestamp[13];
> -     Octstr *tmpstr;
> -     Octstr *tmpstr2;
> -
> -     time(&t_time);
> -     tmpstr = octstr_create(":");
> -     tmpstr2 = octstr_cat(emimsg->fields[E01_ADC], tmpstr);
> -     octstr_destroy(tmpstr); 
> -     gw_strftime(timestamp, sizeof(timestamp), "%d%m%y%H%M%S", 
> localtime_r(&t_time, &tm_time));
> -     tmpstr = octstr_create(timestamp);
> -     reply->fields[1] = octstr_cat(tmpstr2, tmpstr);
> -     octstr_destroy(tmpstr);
> -     octstr_destroy(tmpstr2);
> - }
> + reply->fields[1] = create_0x_SM_field(emimsg->fields[E01_ADC]);
> 
>  if (emi2_emimsg_send(conn, server, reply) < 0) {
>      emimsg_destroy(reply);
> @@ -927,6 +938,38 @@
>         emimsg_destroy(reply);
>         return (st_code < 0 ? -1 : 1);
> 
> +    /*
> +     * Handle OP/02 multiple address call input operation. This is the MO 
> side 
> +     * of the protocol implementation.
> +     */
> +    case 02:
> +    /*
> +     * Handle OP/03 call input with suplementary services operation. This is 
> +     * the MO side of the protocol implementation. 
> +     */
> +    case 03:
> +    /*
> +     * Handle OP/57 response inquiry message operation. This is the MO side 
> +     * of the protocol implementation.
> +     */
> +    case 57:
> +    /*
> +     * Handle OP/58 response delete message operation. This is 
> +     * the MO side of the protocol implementation. 
> +     */
> +    case 58:
> + /*
> + * These operations aren't implemented yet, return a NACK with error code
> + * 03 : Operation not supported by system
> + */
> + error(0, "EMI2[%s]: Operation type %d not implemented yet",
> + octstr_get_cstr(privdata->name), emimsg->ot);
> + reply = emimsg_create_reply(emimsg->ot, emimsg->trn, 0, privdata->name);
> + reply->fields[1] = octstr_create("03");
> + st_code = emi2_emimsg_send(conn, server, reply);
> + emimsg_destroy(reply);
> + return (st_code < 0 ? -1 : 1);
> +
>     default:
>  error(0, "EMI2[%s]: I don't know how to handle operation type %d", 
>        octstr_get_cstr(privdata->name), emimsg->ot);
>


Reply via email to