/* misc.c - Miscellaneous library functions */

/* Written 1997-2000 by Werner Almesberger, EPFL-ICA/ICA */

#if HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdint.h>
#include <stdarg.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h> /* for htons */

#include <atm.h>
#include <atmsap.h>


int __atmlib_fetch(const char **pos,...)
{
    const char *value;
    int ref_len,best_len,len;
    int i,best;
    va_list ap;

    va_start(ap,pos);
    ref_len = strlen(*pos);
    best_len = 0;
    best = -1;
    for (i = 0; (value = va_arg(ap,const char *)); i++) {
	len = strlen(value);
	if (*value != '!' && len <= ref_len && len > best_len &&
	  !strncasecmp(*pos,value,len)) {
	    best = i;
	    best_len = len;
	}
    }
    va_end(ap);
    if (best > -1) (*pos) += best_len;
    return best;
}


void atm_tcpip_port_mapping(char *vs_id,uint8_t protocol,uint16_t port)
{
    memcpy(vs_id,ATM_FORUM_OUI "\x01",4);
    vs_id[4] = protocol; /* e.g. IP_TCP or IP_UDP; from netinet/protocols.h */
    vs_id[5] = (htons(port) >> 8) & 255;
    vs_id[6] = htons(port) & 255;
}