utils.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:4k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * utils.c - generally useful, non-application specific functions for Gateway
  3.  *
  4.  * Kalle Marjola <rpr@wapit.com>
  5.  */
  6. #ifndef GW_UTILS_H
  7. #define GW_UTILS_H
  8. #include <stddef.h>
  9. #include <stdio.h>
  10. #include "octstr.h"
  11. #include <termios.h>
  12. /*
  13.  * Octet and MultibyteInteger (variable length) functions
  14.  */
  15. typedef unsigned char Octet; /* 8-bit basic data */
  16. typedef unsigned long MultibyteInt; /* limited to 32 bits, not 35 */
  17. /* get value of a multibyte ineteger. Note that it MUST be a valid
  18.  * numbers, otherwise an overflow may occur as the function keeps
  19.  * on reading the number until continue-bit (high bit) is not set.
  20.  * Does not fail, always returns some number, but may overflow. */
  21. MultibyteInt get_variable_value(Octet *source, int *len);
  22. /* write given multibyte integer into given destination string, which
  23.  * must be large enough to handle the number (5 bytes is always sufficient)
  24.  * returns the total length of the written number, in bytes. Does not fail */
  25. int write_variable_value(MultibyteInt value, Octet *dest);
  26. /* reverse the value of an octet */
  27. Octet reverse_octet(Octet source);
  28. /* parse command line arguments and set options '-v', '-D', '-F' and '-V'
  29.  * (or --verbosity, --debug, --logfile, --fileverbosity, respectively)
  30.  *
  31.  * Any other argument starting with '-' calls 'find_own' function,
  32.  * which is provided by the user. If set to NULL, these are ignored
  33.  * (but error message is put into stderr)
  34.  *
  35.  * Returns index of next argument after any parsing 
  36.  *
  37.  * Function 'find_own' has following parameters:
  38.  *   index is the current index in argv
  39.  *   argc and argv are command line parameters, directly transfered 
  40.  *
  41.  *   the function returns any extra number of parameters needed to be
  42.  *   skipped. It must personally deal with any malformed arguments.
  43.  *   It return -1 if it cannot find match for the argument
  44.  *
  45.  * sample simple function is like:
  46.  *   int find_is_there_X(int i, int argc, char **argv)
  47.  *      {  if (strcmp(argv[i], "-X")==0) return 0; else return -1; } 
  48.  */
  49. int get_and_set_debugs(int argc, char **argv,
  50.        int (*find_own) (int index, int argc, char **argv));
  51. /*
  52.  * return 0 if 'ip' is denied by deny_ip and not allowed by allow_ip
  53.  * return 1 otherwise (deny_ip is NULL or 'ip' is in allow_ip or is not
  54.  *  in deny_ip)
  55.  * return -1 on error ('ip' is NULL)
  56.  */
  57. int is_allowed_ip(Octstr *allow_ip, Octstr *deny_ip, Octstr *ip);
  58. /*
  59.  * Return 1 if 'ip' is not allowed to connect, when 'allow_ip' defines
  60.  * allowed hosts, and 0 if connect ok. If 'allow_ip' is NULL, check against
  61.  * "127.0.0.1" (localhost)
  62.  */
  63. int connect_denied(Octstr *allow_ip, Octstr *ip);
  64. /*
  65.  * Checks if a given prefix list seperated with semicolon does match
  66.  * a given number.
  67.  *
  68.  * This is mainly used for the allowed-prefix, denied-prefix configuration
  69.  * directives.
  70.  */
  71. int does_prefix_match(Octstr *prefix, Octstr *number);
  72. /*
  73.  * Normalize 'number', like change number "040500" to "0035840500" if
  74.  * the dial-prefix is like "0035840,040;0035850,050"
  75.  *
  76.  * return -1 on error, 0 if no match in dial_prefixes and 1 if match found
  77.  * If the 'number' needs normalization, it is done.
  78.  */
  79. int normalize_number(char *dial_prefixes, Octstr **number);
  80. /*
  81.  * Convert a standard "network long" (32 bits in 4 octets, most significant
  82.  * octet first) to the host representation.
  83.  */
  84. long decode_network_long(unsigned char *data);
  85. /*
  86.  * Convert a long to the standard network representation (32 bits in 4
  87.  * octets, most significant octet first).
  88.  */
  89. void encode_network_long(unsigned char *data, unsigned long value);
  90. /* kannel implementation of cfmakeraw, which is an extension in GNU libc */
  91. void kannel_cfmakeraw (struct termios *tio);
  92. /*
  93.  * Wrappers around the isdigit and isxdigit functions that are guaranteed
  94.  * to be functions, not macros. (The standard library functions are also
  95.  * guaranteed by the C standard to be functions, in addition to possibly
  96.  * also being macros, but not all implementations follow the standard.)
  97.  */
  98. int gw_isdigit(int);
  99. int gw_isxdigit(int);
  100. /*
  101.  * Rounds up the result of a division
  102.  */
  103. int roundup_div(int a, int b);
  104. #endif