4. Otra función de desempaquetamiento de estructuras

La función smpp34_unpack2( ... ) tiene el mismo efecto que smpp34_unpack( ... ), pero no necesita el parámetro de command_id. En la librería todas las funciones de pack/unpack necesitan el command_id ya que el parsing del buffer depende de este parámetro. La función toma tres 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 desempaquetado, luego hay una descripción en modo texto en la variable global smpp34_strerror. El detalle del código de la función se muestra abajo.

extern int smpp34_errno;
extern char smpp34_strerror[2048];

int smpp34_unpack2( void    *tt,     /* out */
                    uint8_t *ptrBuf, /* in  */
                    int     ptrLen,  /* in  */ )
{
    uint32_t cmdid;
    uint32_t tempo;
    memcpy(&tempo, ptrBuf + 4, sizeof(uint32_t)); /* get command_id PDU */
    cmdid = ntohl( tempo );
    return( smpp34_unpack(cmdid, tt, ptrBuf, ptrLen) );
};
 
    
Donde:

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. El puntero a dicha esctructura describe donde va a volcare el contenido del buffer.

ptrBuf: es un puntero a un buffer, donde va a almacenado el PDU empacado.

ptrLen: en esta variable va el largo del buffer anteriormente descripto.