18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* misc.c - Miscellaneous library functions */ 28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* Written 1997-2000 by Werner Almesberger, EPFL-ICA/ICA */ 48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#if HAVE_CONFIG_H 68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <config.h> 78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#endif 88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <stdint.h> 108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <stdarg.h> 118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <string.h> 128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <sys/socket.h> 138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <sys/ioctl.h> 148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <netinet/in.h> /* for htons */ 158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <atm.h> 178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <atmsap.h> 188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint __atmlib_fetch(const char **pos,...) 218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project const char *value; 238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int ref_len,best_len,len; 248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int i,best; 258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project va_list ap; 268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project va_start(ap,pos); 288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project ref_len = strlen(*pos); 298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project best_len = 0; 308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project best = -1; 318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for (i = 0; (value = va_arg(ap,const char *)); i++) { 328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project len = strlen(value); 338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (*value != '!' && len <= ref_len && len > best_len && 348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project !strncasecmp(*pos,value,len)) { 358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project best = i; 368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project best_len = len; 378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project va_end(ap); 408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (best > -1) (*pos) += best_len; 418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return best; 428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectvoid atm_tcpip_port_mapping(char *vs_id,uint8_t protocol,uint16_t port) 468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project memcpy(vs_id,ATM_FORUM_OUI "\x01",4); 488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project vs_id[4] = protocol; /* e.g. IP_TCP or IP_UDP; from netinet/protocols.h */ 498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project vs_id[5] = (htons(port) >> 8) & 255; 508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project vs_id[6] = htons(port) & 255; 518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 52