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 ........ ........
|