Como vemos la función smpp34_pack( ... )
toma cinco parámetros y retorna un valor entero que describe el
resultado de la operación. Un valor distinto de 0 en el retorno,
indica que hubo un error en el intento de empaquetado, luego hay una
descripción en modo texto en la variable global
smpp34_strerror
.
extern int smpp34_errno; extern char smpp34_strerror[2048]; int smpp34_pack( uint32_t type, /* in */ uint8_t *ptrBuf, /* out */ int ptrSize, /* out */ int *ptrLen, /* out */ void *tt /* in */ ) |
type: es el command_id del PDU que se quiere empacar, el valor de este parámetro está directamente relacionado a una estructura de datos especifica.
ptrBuf: es un puntero a un buffer, donde va a almacenarse el PDU empacado. La memoria debe ser reservada de manera externa, ya sea dinámica o estática.
ptrSize: es un entero que describe el largo del buffer destino (el parámetro anterior).
ptrLen: en caso de éxito en la llamada, en esta variable queda el largo de la data dentro del buffer. Obviamente, siempre ptrLen < ptrSize.
tt: Es un puntero a una de las estructuras de datos listadas en la introducción y que se corresponde con el valor del primer parámetro.
Se detalla a continuación un pequeño ejemplo de uso, en el mismo, se detalla la creación del objeto de dato, la carga de información en la estructura, y el empaquetamiento de la misma.
Ejemplo 1. Ejemplo de pack y dumpBuff.
#include <stdio.h> #include <string.h> #include <stdint.h> #include <netinet/in.h> #include "smpp34.h" #include "smpp34_structs.h" #include "smpp34_params.h" char bufPDU[2048]; int bufPDULen = 0; char bPrint[2048]; int main( int argc, char *argv[] ) { int ret = 0; enquire_link_t pdu; /* Init PDU ***********************************************************/ memset(&pdu, 0, sizeof(enquire_link_t)); pdu.command_length = 0; pdu.command_id = ENQUIRE_LINK; /* defined in smpp34.h */ pdu.command_status = ESME_ROK; /* defined in smpp34.h */ pdu.sequence_number = 1; /* Linealize PDU to buffer ********************************************/ memset(&bufPDU, 0, sizeof(bufPDU)); ret = smpp34_pack( pdu.command_id, bufPDU, sizeof(bufPDU), &bufPDULen, (void*)&pdu); if( ret != 0 ){ printf("Error in smpp34_pack():%d:\n%s\n", smpp34_errno, smpp34_strerror); return( -1 ); }; /* Print Buffer *******************************************************/ memset(bPrint, 0, sizeof(bPrint)); ret = smpp34_dumpBuf(bPrint, sizeof(bPrint), bufPDU, bufPDULen); if( ret != 0 ){ printf("Error in smpp34_dumpBuf():%d:\n%s\n", smpp34_errno, smpp34_strerror ); return( -1 ); }; printf("The PDU enquire_link is packet in\n%s", bPrint); return( 0 ); }; |
smpp34_dumpBuf( ... )
. El ejemplo se compila y ejecuta:
[rtremsal@localhost dist]$ gcc -o lo lo.c -I./include -static -L./lib -lsmpp34 [rtremsal@localhost dist]$ ./lo The PDU enquire_link is packet in 00 00 00 10 00 00 00 15 00 00 00 00 00 00 00 01 ........ ........ |