home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 November / PCWorld_1999-11_cd.bin / Komunik / Sambar / _setup.1 / sambar.h < prev    next >
C/C++ Source or Header  |  1999-09-09  |  20KB  |  775 lines

  1. /*
  2. ** SAMBAR.H
  3. **
  4. **      This is the public WIN32 header file for the Sambar 
  5. **        Server application.
  6. **
  7. **        Confidential Property of Tod Sambar
  8. **        (c) Copyright Tod Sambar 1996-1997
  9. **        All rights reserved.
  10. **
  11. **
  12. ** History:
  13. ** Chg#    Date    Description                                                Resp
  14. ** ----    -------    -------------------------------------------------------    ----
  15. **        10AUG96    Created                                                    sambar
  16. **        11APR97    Added server start/stop APIs                            sambar
  17. */
  18.  
  19. #if     !defined(__SAMBAR_H__)
  20. #define __SAMBAR_H__
  21.  
  22. /*
  23. ** Types
  24. */
  25. typedef int                            SA_RETCODE;
  26. typedef long                        SA_INT;
  27. typedef int                            SA_BOOL;
  28. typedef void                        SA_VOID;
  29. typedef unsigned char                SA_BYTE;
  30. typedef unsigned char                SA_CHAR;
  31.  
  32. #ifndef TEXT
  33. #define TEXT(x)                        (x)
  34. #endif
  35.  
  36. #ifndef MAX
  37. #define MAX(a,b)                    ((SA_INT)(a) > (SA_INT)(b) ? (a) : (b))
  38. #endif
  39.  
  40. #ifndef MIN
  41. #define MIN(a,b)                    ((SA_INT)(a) < (SA_INT)(b) ? (a) : (b))
  42. #endif
  43.  
  44. /*
  45. ** Public Structures
  46. */
  47. #define SA_CTX                        SA_VOID
  48. #define SA_CONN                        SA_VOID
  49. #define SA_PARAMS                    SA_VOID
  50. #define SA_REC                        SA_VOID
  51.  
  52.  
  53. /*
  54. ** Return Codes
  55. */
  56. #define SA_SUCCEED                    1
  57. #define SA_FAIL                        0
  58.  
  59.  
  60. /*
  61. ** Error Codes
  62. */
  63. #define SA_E_DOCFOLLOWS                (SA_INT)-1
  64. #define SA_E_INTERNALSYSTEM            (SA_INT)0
  65. #define SA_E_ALREADYLOGGEDIN        (SA_INT)1
  66. #define SA_E_BADCOOKIE                (SA_INT)2
  67. #define SA_E_INVALIDLOGIN            (SA_INT)3
  68. #define SA_E_MAXLOGINS                (SA_INT)4
  69. #define SA_E_ALREADYDEFINED            (SA_INT)5
  70. #define SA_E_INVALIDDATA            (SA_INT)6
  71. #define SA_E_NOTIMPLEMENTED            (SA_INT)7
  72. #define SA_E_FORBIDDEN                (SA_INT)8
  73. #define SA_E_NOTFOUND                (SA_INT)9
  74. #define SA_E_DUPLICATE                (SA_INT)10
  75. #define SA_E_DBOPFAILED                (SA_INT)11
  76. #define SA_E_BADGATEWAY                (SA_INT)12
  77. #define SA_E_REDIRECT                (SA_INT)13
  78. #define SA_E_USRDEF1                (SA_INT)14
  79. #define SA_E_USRDEF2                (SA_INT)15
  80. #define SA_E_USRDEF3                (SA_INT)16
  81. #define SA_E_USRDEF4                (SA_INT)17
  82. #define SA_E_USRDEF5                (SA_INT)18
  83. #define SA_E_USRDEF6                (SA_INT)19
  84. #define SA_E_USRDEF7                (SA_INT)20
  85. #define SA_E_USRDEF8                (SA_INT)21
  86. #define SA_E_USRDEF9                (SA_INT)22
  87. #define SA_E_USRDEF10                (SA_INT)23
  88. #define SA_E_USRDEF11                (SA_INT)24
  89. #define SA_E_USRDEF12                (SA_INT)25
  90. #define SA_E_USRDEF13                (SA_INT)26
  91. #define SA_E_USRDEF14                (SA_INT)27
  92. #define SA_E_USRDEF15                (SA_INT)28
  93. #define SA_E_USRDEF16                (SA_INT)29
  94. #define SA_E_USRDEF17                (SA_INT)30
  95. #define SA_E_USRDEF18                (SA_INT)31
  96. #define SA_E_USRDEF19                (SA_INT)32
  97. #define SA_E_USRDEF20                (SA_INT)33
  98. #define SA_E_TIMEOUT                (SA_INT)34
  99. #define SA_E_SHUTDOWN                (SA_INT)35
  100. #define SA_E_SERVERDOWN                (SA_INT)36
  101. #define SA_E_PAUSED                    (SA_INT)37
  102. #define SA_E_MAXCGIS                (SA_INT)38
  103. #define SA_E_INUSE                    (SA_INT)39
  104. #define SA_E_RESTART                (SA_INT)40
  105. #define SA_E_INTERRUPTED            (SA_INT)41
  106.  
  107.  
  108. /*
  109. ** Actions
  110. */
  111. #define    SA_GET                        (SA_INT)1
  112. #define    SA_SET                        (SA_INT)2
  113. #define    SA_CLEAR                    (SA_INT)3
  114.  
  115. /*
  116. ** Misc Defines
  117. */
  118. #define SA_NULLTERM                    (SA_INT)-3
  119.  
  120. /*
  121. ** Context Properties
  122. */
  123. #define SA_CTXPROP_SYSADMIN            (SA_INT)1
  124. #define SA_CTXPROP_HOMEDIR            (SA_INT)2
  125. #define SA_CTXPROP_LOGDIR            (SA_INT)3
  126. #define SA_CTXPROP_DBCACHE            (SA_INT)4
  127. #define SA_CTXPROP_APPLICDIR        (SA_INT)5
  128. #define SA_CTXPROP_SERVERSW            (SA_INT)7
  129. #define SA_CTXPROP_SERVERPORT        (SA_INT)8
  130. #define SA_CTXPROP_SERVERNAME        (SA_INT)9
  131. #define SA_CTXPROP_SERVERIP            (SA_INT)10
  132. #define SA_CTXPROP_BUILDID            (SA_INT)11
  133. #define SA_CTXPROP_HTTPLOGFUNC        (SA_INT)12
  134. #define SA_CTXPROP_SECURITYMODEL    (SA_INT)13
  135. #define SA_CTXPROP_LICENSETYPE        (SA_INT)14
  136.  
  137. /*
  138. ** Connection Properties
  139. */
  140. #define SA_CONNPROP_HOST            (SA_INT)1
  141. #define SA_CONNPROP_AGENT            (SA_INT)2
  142. #define SA_CONNPROP_REFERER            (SA_INT)3
  143. #define SA_CONNPROP_REQUEST            (SA_INT)4
  144. #define SA_CONNPROP_REQUESTMETHOD    (SA_INT)5
  145. #define SA_CONNPROP_USERNAME        (SA_INT)6
  146. #define SA_CONNPROP_NAME            (SA_INT)7
  147. #define SA_CONNPROP_PASSWORD        (SA_INT)8
  148. #define SA_CONNPROP_IPADDR            (SA_INT)9
  149. #define SA_CONNPROP_DOCSDIR            (SA_INT)10
  150. #define SA_CONNPROP_DOCSPATH        (SA_INT)11
  151.  
  152. /*
  153. ** Scheduler Time Arguments
  154. */
  155. #define SA_SCHEDULETIME_TIMEOUT        (SA_INT)1        /* Every 2 minutes    */
  156. #define SA_SCHEDULETIME_HOURLY        (SA_INT)2        /* Every hour         */
  157. #define SA_SCHEDULETIME_DAILY        (SA_INT)3        /* Every day         */
  158. #define SA_SCHEDULETIME_WEEKLY        (SA_INT)4        /* Every week         */
  159. #define SA_SCHEDULETIME_MONTHLY        (SA_INT)5        /* Every month         */
  160.  
  161. /*
  162. ** Next Page Argument
  163. */
  164. #define SA_PAGE_ARG                    TEXT("RCpage")
  165. #define SA_REDIRECT_ARG                TEXT("RCredirect")
  166.  
  167. /*
  168. ** System Administrator Folder
  169. */
  170. #define SA_ADMIN_FOLDER                TEXT("sysadmin")
  171.  
  172. /*
  173. ** Default group
  174. */
  175. #define SA_DEFAULT_GROUP            TEXT("other")
  176.  
  177. /*
  178. ** RPC authorization types
  179. */
  180. #define SA_AUTHORIZATION_ALL        (SA_INT)0        /* All clients */
  181. #define SA_AUTHORIZATION_USER        (SA_INT)1        /* Logged in users only */
  182. #define SA_AUTHORIZATION_ADMIN        (SA_INT)2        /* Admin only */
  183.  
  184. /*
  185. ** RPC parameters
  186. */
  187. typedef struct sa__rpcparam
  188. {
  189.     SA_CHAR            *name;                /* Parameter name */
  190.     SA_BOOL            required;            /* Required or optional param */
  191.     SA_CHAR            *descr;                /* Parameter description */
  192. } SA_RPCPARAM;
  193.  
  194. typedef struct sa__arg
  195. {
  196.     SA_CHAR            *value;                /* Parameter value */
  197.     struct sa__arg    *next;
  198. } SA_ARG;
  199.  
  200. /*
  201. ** Scalar parameters
  202. */
  203. typedef struct sa__scalararg
  204. {
  205.     SA_CHAR            *name;                /* Argument name */
  206.     SA_CHAR            *descr;                /* Argument description */
  207. } SA_SCALARARG;
  208.  
  209. /*
  210. ** Request-handler modules
  211. */
  212. typedef struct sa__request
  213. {
  214.         SA_INT        method;                /* SA_METHOD_* */
  215.         SA_CHAR        *uri;                /* URI requested. */
  216.         SA_INT         urilen; 
  217.         SA_CHAR        *path;                /* path to requested URI. */
  218.         SA_INT         pathlen; 
  219.         SA_CHAR     *args;
  220.         SA_INT         argslen; 
  221.         SA_CHAR     *content;
  222.         SA_INT         contentlen;
  223.         SA_CHAR     *pathinfo;
  224.         SA_INT         pathinfolen;
  225. } SA_REQUEST;
  226.  
  227. #define SA_METHOD_GET                (SA_INT)1
  228. #define SA_METHOD_POST                (SA_INT)2
  229. #define SA_METHOD_PUT                (SA_INT)3
  230.  
  231. /*
  232. ** HTTP Log callback structure
  233. */
  234. typedef struct sa__httplog
  235. {
  236.         SA_INT         size; 
  237.         SA_INT         status; 
  238.         SA_CHAR        *method;
  239.         SA_CHAR     *timestamp;
  240.         SA_CHAR     *request;
  241.         SA_CHAR     *args;
  242.         SA_CHAR     *vhost;
  243.         SA_CHAR     *user;                /* User IP Address */
  244.         SA_CHAR        *username;
  245.         SA_CHAR        *referer;
  246.         SA_CHAR        *agent;
  247.  
  248.         /* Include system statistics.                                    */
  249.         SA_INT         allconns;             /* Total network connections    */
  250.         SA_INT         httpconns;             /* # of HTTP connections        */
  251.         SA_INT         threads;             /* Total threads                */
  252. } SA_HTTPLOG;
  253.  
  254. /*
  255. ** Password Management
  256. */
  257. #define SA_PASSWD_FILE                TEXT("passwd")
  258. #define SA_MAX_NAME                    (SA_INT)64
  259. #define SA_MAX_VALUE                (SA_INT)1000
  260.  
  261. typedef struct sa__ftp
  262. {
  263.     SA_INT        privs;                                    /* FTP access */
  264.     SA_INT        ftpmax;                                    /* Maximum FTP MB */
  265.     SA_INT        dirlen;
  266.     SA_CHAR        dir[SA_MAX_NAME + 1];                    /* FTP root dir */
  267. } SA_FTP;
  268.  
  269. typedef struct sa__nntp
  270. {
  271.     SA_INT        privs;                                    /* NNTP access */
  272. } SA_NNTP;
  273.  
  274. typedef struct sa__passwd
  275. {
  276.     SA_INT        ftpprivs;                                /* FTP priviledges */
  277.     SA_INT        ftpmax;                                    /* FTP max upload */
  278.     SA_INT        dirlen;
  279.     SA_INT        namelen;
  280.     SA_INT        grouplen;
  281.     SA_INT        passwordlen;
  282.     SA_CHAR        name[SA_MAX_NAME + 1];                    /* Symbolic name */
  283.     SA_CHAR        group[SA_MAX_NAME + 1];
  284.     SA_CHAR        password[SA_MAX_NAME + 1];
  285.     SA_CHAR        dir[SA_MAX_NAME + 1];                    /* FTP dir */
  286.  
  287. } SA_PASSWD;
  288.  
  289. typedef struct sa__user
  290. {
  291.     SA_INT        grouplen;
  292.     SA_INT        usernamelen;
  293.     SA_CHAR        group[SA_MAX_NAME + 1];
  294.     SA_CHAR        username[SA_MAX_NAME + 1];
  295. } SA_USER;
  296.  
  297. typedef struct sa__group
  298. {
  299.     SA_INT        namelen;
  300.     SA_CHAR        name[SA_MAX_NAME + 1];
  301. } SA_GROUP;
  302.  
  303. /*
  304. ** FTP Priviledges
  305. */
  306. #define SA_PRIV_NOACCESS            (SA_INT)0
  307. #define SA_PRIV_READONLY            (SA_INT)1
  308. #define SA_PRIV_READWRITE            (SA_INT)2
  309.  
  310. /*
  311. ** Server Types
  312. */
  313. #define SA_SERVERTYPE_HTTP            (SA_INT)100
  314. #define SA_SERVERTYPE_HTTPPROXY        (SA_INT)101
  315. #define SA_SERVERTYPE_FTP            (SA_INT)102
  316. #define SA_SERVERTYPE_SMTPPROXY        (SA_INT)103
  317. #define SA_SERVERTYPE_POP3PROXY        (SA_INT)104
  318. #define SA_SERVERTYPE_IMAP4PROXY    (SA_INT)105
  319. #define SA_SERVERTYPE_BRIDGEPROXY    (SA_INT)106
  320. #define SA_SERVERTYPE_NNTPPROXY        (SA_INT)107
  321. #define SA_SERVERTYPE_FTPPROXY        (SA_INT)108
  322. #define SA_SERVERTYPE_SOCKSPROXY    (SA_INT)109
  323. #define SA_SERVERTYPE_TELNETPROXY    (SA_INT)110
  324. #define SA_SERVERTYPE_REALPROXY        (SA_INT)111
  325. #define SA_SERVERTYPE_SMTP            (SA_INT)112
  326. #define SA_SERVERTYPE_POP3            (SA_INT)113
  327. #define SA_SERVERTYPE_IMAP4            (SA_INT)114
  328. #define SA_SERVERTYPE_TELNET        (SA_INT)115
  329. #define SA_SERVERTYPE_DNS            (SA_INT)116
  330. #define SA_SERVERTYPE_NNTP            (SA_INT)117
  331.  
  332. /*
  333. ** Record Flags
  334. */ 
  335. #define SA_REC_CREATE                (SA_INT)0x0001
  336. #define SA_REC_DELETE                (SA_INT)0x0002
  337.  
  338.  
  339. /*
  340. ** Sambar Server callbacks
  341. */
  342. typedef SA_RETCODE                (* SA_INITFUNC)(SA_CTX *ctx);
  343. typedef SA_RETCODE                (* SA_EXITFUNC)(SA_CTX *ctx);
  344. typedef SA_RETCODE                (* SA_LOGINFUNC)(SA_CTX *ctx, SA_CONN *conn, 
  345.                                     SA_CHAR *username, SA_INT usernamelen, 
  346.                                     SA_CHAR *password, SA_INT passwordlen, 
  347.                                     SA_INT *infop);
  348. typedef SA_RETCODE                (* SA_LOGOUTFUNC)(SA_CTX *ctx, SA_CONN *conn);
  349. typedef SA_RETCODE                (* SA_PROFILEFUNC)(SA_CTX *ctx, SA_CONN *conn,
  350.                                     SA_CHAR *buffer, SA_INT buflen, 
  351.                                     SA_CHAR *data);
  352. typedef SA_RETCODE                (* SA_REQUESTFUNC)(SA_CTX *ctx, SA_CONN *conn,
  353.                                     SA_CHAR *uri, SA_INT urilen, 
  354.                                     SA_PARAMS *params, SA_INT *infop);
  355. typedef SA_RETCODE                (* SA_RPCFUNC)(SA_CTX *ctx, SA_CONN *conn,
  356.                                     SA_PARAMS *params, SA_INT *infop);
  357. typedef SA_RETCODE                (* SA_SCALARFUNC)(SA_CTX *ctx, SA_CONN *conn,
  358.                                     SA_ARG *args, SA_CHAR *value);
  359. typedef SA_RETCODE                (* SA_PROPFUNC)(SA_CTX *ctx, SA_VOID *argp, 
  360.                                     SA_CHAR *name, SA_CHAR *value);
  361. typedef SA_RETCODE                (* SA_FTPFUNC)(SA_CTX *ctx, SA_CHAR *name,
  362.                                     SA_INT namelen, SA_CHAR *password, 
  363.                                     SA_INT passwordlen, SA_FTP *ftpresp);
  364. typedef SA_RETCODE                (* SA_NNTPFUNC)(SA_CTX *ctx, SA_CHAR *name,
  365.                                     SA_INT namelen, SA_CHAR *password, 
  366.                                     SA_INT passwordlen, SA_NNTP *nntpresp);
  367. typedef SA_RETCODE                (* SA_TELNETFUNC)(SA_CTX *ctx, SA_CHAR *name,
  368.                                     SA_INT namelen, SA_CHAR *password, 
  369.                                     SA_INT passwordlen);
  370. typedef SA_RETCODE                (* SA_MAILFUNC)(SA_CTX *ctx, SA_CHAR *name,
  371.                                     SA_INT namelen, SA_CHAR *password, 
  372.                                     SA_INT passwordlen);
  373. typedef SA_RETCODE                (* SA_NETCONNECTFUNC)(SA_CTX *ctx, 
  374.                                     SA_CHAR *ipaddr, SA_INT servertype);
  375. typedef SA_RETCODE                (* SA_HTTPPROXYFUNC)(SA_CTX *ctx, SA_CONN *conn,
  376.                                     SA_CHAR *host, SA_INT hostlen,
  377.                                     SA_CHAR *url, SA_INT urllen);
  378. typedef SA_RETCODE                (* SA_ENVTFUNC)(SA_CTX *ctx, SA_CONN *conn,
  379.                                     SA_CHAR *buffer, SA_INT buflen, 
  380.                                     SA_CHAR *data);
  381. typedef SA_RETCODE                (* SA_MODULEFUNC)(SA_CTX *ctx, SA_CONN *conn,
  382.                                     SA_REQUEST *request, SA_INT *infop);
  383. typedef SA_VOID                    (* SA_HTTPLOGFUNC)(SA_CTX *ctx, 
  384.                                     SA_HTTPLOG *httplog);
  385. typedef SA_RETCODE                (* SA_SCHEDULEFUNC)(SA_CTX *ctx, SA_CHAR *name,
  386.                                     SA_VOID *argp);
  387.  
  388.  
  389. /*
  390. ** Sambar Server Function Prototypes
  391. */
  392.  
  393. #define SA_PUBLIC                __cdecl
  394. #define SA_EXPORT                __declspec(dllexport)
  395.  
  396. #if defined(__cplusplus)
  397. extern "C" {
  398. #endif    /* defined(__cplusplus) */
  399.  
  400. /*
  401. ** Sambar Server startup/shutdown
  402. */
  403. extern SA_RETCODE SA_EXPORT        sa_server(
  404.                                 SA_VOID            *hWnd
  405.                                 );
  406. extern SA_BOOL SA_EXPORT        sa_stopped(
  407.                                 );
  408. extern SA_RETCODE SA_EXPORT        sa_shutdown(
  409.                                 SA_BOOL            restart
  410.                                 );
  411. extern SA_RETCODE SA_EXPORT        sa_pause(
  412.                                 SA_BOOL            unpause
  413.                                 );
  414. /*
  415. ** General Functions
  416. */
  417.  
  418. extern SA_RETCODE SA_EXPORT        sa_cgi_exec(
  419.                                 SA_CTX            *ctx,
  420.                                 SA_CONN            *conn,
  421.                                 SA_REQUEST        *request
  422.                                 );
  423. extern SA_RETCODE SA_EXPORT        sa_wincgi_exec(
  424.                                 SA_CTX            *ctx,
  425.                                 SA_CONN            *conn,
  426.                                 SA_REQUEST        *request
  427.                                 );
  428. extern SA_RETCODE SA_EXPORT        sa_cmd_init(
  429.                                 SA_CTX            *ctx,
  430.                                 SA_CHAR            *name,
  431.                                 SA_RPCPARAM        *params,
  432.                                 SA_INT            numparams,
  433.                                 SA_INT            authorization,
  434.                                 SA_CHAR            *descr,
  435.                                 SA_RPCFUNC        funcp
  436.                                 );
  437. extern SA_RETCODE SA_EXPORT        sa_scalar_init(
  438.                                 SA_CTX            *ctx,
  439.                                 SA_CHAR            *name,
  440.                                 SA_SCALARARG    *args,
  441.                                 SA_INT            numargs,
  442.                                 SA_CHAR            *descr,
  443.                                 SA_SCALARFUNC    funcp
  444.                                 );
  445. extern SA_RETCODE SA_EXPORT        sa_props_load(
  446.                                 SA_CTX            *ctx,
  447.                                 SA_CHAR            *filename,
  448.                                 SA_CHAR            *section,
  449.                                 SA_VOID            *argp,
  450.                                 SA_PROPFUNC        funcp
  451.                                 );
  452. extern SA_RETCODE SA_EXPORT        sa_send_file(
  453.                                 SA_CONN            *conn,
  454.                                 SA_CHAR            *filename
  455.                                 );
  456. extern SA_RETCODE SA_EXPORT        sa_send_macro(
  457.                                 SA_CONN            *conn,
  458.                                 SA_CHAR            *macroname
  459.                                 );
  460. extern SA_RETCODE SA_EXPORT        sa_send_header(
  461.                                 SA_CONN            *conn,
  462.                                 SA_CHAR            *buffer,
  463.                                 SA_INT            buflen
  464.                                 );
  465. extern SA_RETCODE SA_EXPORT        sa_params(
  466.                                 SA_CTX            *ctx,
  467.                                 SA_CONN            *conn,
  468.                                 SA_PARAMS        **paramsp
  469.                                 );
  470. extern SA_RETCODE SA_EXPORT        sa_param(
  471.                                 SA_CTX            *ctx,
  472.                                 SA_PARAMS        *params,
  473.                                 SA_CHAR            *name,
  474.                                 SA_CHAR            **valuep,
  475.                                 SA_INT            *valuelenp
  476.                                 );
  477. extern SA_RETCODE SA_EXPORT        sa_param_set(
  478.                                 SA_CTX            *ctx,
  479.                                 SA_PARAMS        *params,
  480.                                 SA_CHAR            *name,
  481.                                 SA_CHAR            *value,
  482.                                 SA_INT            valuelen
  483.                                 );
  484. extern SA_VOID SA_EXPORT        sa_log(
  485.                                 SA_CTX            *ctx,
  486.                                 SA_CHAR            *buffer
  487.                                 );
  488. extern SA_VOID SA_EXPORT        sa_observe(
  489.                                 SA_CTX            *ctx,
  490.                                 SA_CHAR            *buffer
  491.                                 );
  492. extern SA_RETCODE SA_EXPORT        sa_get_macro(
  493.                                 SA_CTX            *ctx,
  494.                                 SA_CHAR            *macroname,
  495.                                 SA_CHAR            **macrop,
  496.                                 SA_INT            *macrolenp
  497.                                 );
  498. extern SA_RETCODE SA_EXPORT        sa_get_mime(
  499.                                 SA_CTX            *ctx,
  500.                                 SA_CHAR            *name,
  501.                                 SA_INT            namelen,
  502.                                 SA_CHAR            **mimetypep
  503.                                 );
  504. extern SA_RETCODE SA_EXPORT        sa_get_realpath(
  505.                                 SA_CTX            *ctx,
  506.                                 SA_CONN            *conn,
  507.                                 SA_CHAR            *name,
  508.                                 SA_INT            namelen,
  509.                                 SA_CHAR            *path,
  510.                                 SA_INT            maxpath
  511.                                 );
  512. extern SA_INT SA_EXPORT            sa_wildcmp(
  513.                                 SA_CTX            *ctx,
  514.                                 SA_CHAR            *wildstr,
  515.                                 SA_INT            wildstrlen,
  516.                                 SA_CHAR            *arg,
  517.                                 SA_INT            arglen
  518.                                 );
  519. extern SA_RETCODE SA_EXPORT        sa_schedule_task(
  520.                                 SA_CTX            *ctx,
  521.                                 SA_CHAR            *name,
  522.                                 SA_SCHEDULEFUNC    func,
  523.                                 SA_VOID            *argp,
  524.                                 SA_INT            when
  525.                                 );
  526.                                 
  527.  
  528. /*
  529. ** Mail Utility Functions
  530. */
  531. extern SA_RETCODE SA_EXPORT        sa_smtpmail(
  532.                                 SA_CTX            *ctx,
  533.                                 SA_CHAR            *from,
  534.                                 SA_CHAR            *tolist,
  535.                                 SA_CHAR            *cclist,
  536.                                 SA_CHAR            *bcclist,
  537.                                 SA_CHAR            *subject,
  538.                                 SA_CHAR            *message,
  539.                                 SA_CHAR            *attachment
  540.                                 );
  541. extern SA_RETCODE SA_EXPORT        sa_smtpmail2(
  542.                                 SA_CTX            *ctx,
  543.                                 SA_CHAR            *from,
  544.                                 SA_CHAR            *tolist,
  545.                                 SA_CHAR            *cclist,
  546.                                 SA_CHAR            *bcclist,
  547.                                 SA_CHAR            *subject,
  548.                                 SA_CHAR            *message,
  549.                                 SA_CHAR            *attachname,
  550.                                 SA_BYTE            *attachdata,
  551.                                 SA_INT            attachdatalen
  552.                                 );
  553.  
  554. extern SA_RETCODE SA_EXPORT        sa_mbox_create(
  555.                                 SA_CTX            *ctx,
  556.                                 SA_CHAR            *user
  557.                                 );
  558. extern SA_RETCODE SA_EXPORT        sa_mbox_delete(
  559.                                 SA_CTX            *ctx,
  560.                                 SA_CHAR            *user
  561.                                 );
  562. extern SA_BOOL SA_EXPORT        sa_mbox_exists(
  563.                                 SA_CTX            *ctx,
  564.                                 SA_CHAR            *user
  565.                                 );
  566.  
  567. /*
  568. ** Context Functions
  569. */
  570. extern SA_RETCODE SA_EXPORT        sa_ctx_global(
  571.                                 SA_CTX            **ctxp
  572.                                 );
  573. extern SA_RETCODE SA_EXPORT        sa_ctx_key(
  574.                                 SA_CTX            *ctx,
  575.                                 SA_INT            action,
  576.                                 SA_CHAR            *key,
  577.                                 SA_VOID            **valuep
  578.                                 );
  579. extern SA_RETCODE SA_EXPORT        sa_ctx_props(
  580.                                 SA_CTX            *ctx,
  581.                                 SA_INT            action,
  582.                                 SA_INT            property,
  583.                                 SA_BYTE            *buffer,
  584.                                 SA_INT            buflen,
  585.                                 SA_INT            *outlenp
  586.                                 );
  587. extern SA_RETCODE SA_EXPORT        sa_envt_prop(
  588.                                 SA_CTX            *ctx,
  589.                                 SA_CONN            *conn,
  590.                                 SA_BYTE            *prop,
  591.                                 SA_INT            proplen,
  592.                                 SA_CHAR            *buffer
  593.                                 );
  594.  
  595. /*
  596. ** Connection Functions
  597. */
  598. extern SA_RETCODE SA_EXPORT        sa_conn_key(
  599.                                 SA_CONN            *conn,
  600.                                 SA_INT            action,
  601.                                 SA_CHAR            *key,
  602.                                 SA_VOID            **valuep
  603.                                 );
  604. extern SA_RETCODE SA_EXPORT        sa_conn_props(
  605.                                 SA_CONN            *conn,
  606.                                 SA_INT            action,
  607.                                 SA_INT            property,
  608.                                 SA_BYTE            *buffer,
  609.                                 SA_INT            buflen,
  610.                                 SA_INT            *outlenp
  611.                                 );
  612. extern SA_RETCODE SA_EXPORT        sa_conn_send(
  613.                                 SA_CONN            *conn,
  614.                                 SA_CHAR            *buffer,
  615.                                 SA_INT            buflen
  616.                                 );
  617. extern SA_RETCODE SA_EXPORT        sa_conn_flush(
  618.                                 SA_CONN            *conn
  619.                                 );
  620. extern SA_RETCODE SA_EXPORT        sa_conn_redirect(
  621.                                 SA_CONN            *conn,
  622.                                 SA_CHAR            *location,
  623.                                 SA_CHAR            *buffer,
  624.                                 SA_INT            buflen
  625.                                 );
  626.  
  627. /*
  628. ** User/Password Management Routines
  629. */
  630. extern SA_RETCODE SA_EXPORT        sa_passwd_lookup(
  631.                                 SA_CTX            *ctx,
  632.                                 SA_CHAR            *username,
  633.                                 SA_INT            usernamelen,
  634.                                 SA_PASSWD        *passwd
  635.                                 );
  636. extern SA_RETCODE SA_EXPORT        sa_passwd_add(
  637.                                 SA_CTX            *ctx,
  638.                                 SA_CHAR            *username,
  639.                                 SA_INT            usernamelen,
  640.                                 SA_PASSWD        *passwd
  641.                                 );
  642. extern SA_RETCODE SA_EXPORT        sa_passwd_update(
  643.                                 SA_CTX            *ctx,
  644.                                 SA_CHAR            *username,
  645.                                 SA_INT            usernamelen,
  646.                                 SA_PASSWD        *passwd
  647.                                 );
  648. extern SA_RETCODE SA_EXPORT        sa_passwd_delete(
  649.                                 SA_CTX            *ctx,
  650.                                 SA_CHAR            *username,
  651.                                 SA_INT            usernamelen
  652.                                 );
  653. extern SA_RETCODE SA_EXPORT        sa_passwd_list(
  654.                                 SA_CTX            *ctx,
  655.                                 SA_USER            *users,
  656.                                 SA_INT            numusers,
  657.                                 SA_INT            *countp
  658.                                 );
  659.  
  660. /*
  661. ** Group Management Routines
  662. */
  663. extern SA_RETCODE SA_EXPORT        sa_group_add(
  664.                                 SA_CTX            *ctx,
  665.                                 SA_CHAR            *name,
  666.                                 SA_INT            namelen
  667.                                 );
  668. extern SA_RETCODE SA_EXPORT        sa_group_delete(
  669.                                 SA_CTX            *ctx,
  670.                                 SA_CHAR            *name,
  671.                                 SA_INT            namelen
  672.                                 );
  673. extern SA_RETCODE SA_EXPORT        sa_group_list(
  674.                                 SA_CTX            *ctx,
  675.                                 SA_GROUP        *groups,
  676.                                 SA_INT            numgroups,
  677.                                 SA_INT            *countp
  678.                                 );
  679.  
  680. /*
  681. ** Search Functions
  682. */
  683. extern SA_RETCODE SA_EXPORT        sa_search_add(
  684.                                 SA_CTX            *ctx,
  685.                                 SA_CHAR            *indexname,
  686.                                 SA_CHAR            *title,
  687.                                 SA_CHAR            *url,
  688.                                 SA_CHAR            *data,
  689.                                 SA_INT            datalen
  690.                                 );
  691.  
  692. /*
  693. ** RAS Functions
  694. */
  695. extern SA_RETCODE SA_EXPORT        sa_ras_disconnect(
  696.                                 SA_CTX            *ctx,
  697.                                 SA_BOOL            *activep
  698.                                 );
  699.  
  700. /*
  701. ** Record Functions
  702. */
  703. extern SA_RETCODE SA_EXPORT        sa_rec_init(
  704.                                 SA_CTX            *ctx,
  705.                                 SA_CHAR            *filename,
  706.                                 SA_INT            flags,
  707.                                 SA_INT            reclen,
  708.                                 SA_REC            **recp
  709.                                 );
  710. extern SA_RETCODE SA_EXPORT        sa_rec_exit(
  711.                                 SA_REC            *rec,
  712.                                 SA_INT            flags
  713.                                 );
  714. extern SA_RETCODE SA_EXPORT        sa_rec_insert(
  715.                                 SA_REC            *rec,
  716.                                 SA_BYTE            *data,
  717.                                 SA_INT            *idp
  718.                                 );
  719. extern SA_RETCODE SA_EXPORT        sa_rec_update(
  720.                                 SA_REC            *rec,
  721.                                 SA_INT            id,
  722.                                 SA_BYTE            *data
  723.                                 );
  724. extern SA_RETCODE SA_EXPORT        sa_rec_delete(
  725.                                 SA_REC            *rec,
  726.                                 SA_INT            id
  727.                                 );
  728. extern SA_RETCODE SA_EXPORT        sa_rec_fetch(
  729.                                 SA_REC            *rec,
  730.                                 SA_INT            id,
  731.                                 SA_BYTE            *data
  732.                                 );
  733. extern SA_RETCODE SA_EXPORT        sa_rec_next(
  734.                                 SA_REC            *rec,
  735.                                 SA_INT            lastid,
  736.                                 SA_BYTE            *data,
  737.                                 SA_INT            *idp
  738.                                 );
  739.  
  740. /*
  741. ** General Utilities
  742. */
  743. extern SA_INT SA_EXPORT            sa_dirsize(
  744.                                 SA_CHAR            *dirpath
  745.                                 );
  746. extern SA_INT SA_EXPORT            sa_dirfiles(
  747.                                 SA_CHAR            *dirpath
  748.                                 );
  749. extern SA_RETCODE SA_EXPORT        sa_gzip(
  750.                                 SA_CHAR            *filename,
  751.                                 SA_CHAR            *ext
  752.                                 );
  753. extern SA_RETCODE SA_EXPORT        sa_gunzip(
  754.                                 SA_CHAR            *filename,
  755.                                 SA_CHAR            *ext
  756.                                 );
  757. extern SA_RETCODE SA_EXPORT        sa_compress(
  758.                                 SA_BYTE            *in,
  759.                                 SA_INT            inlen,
  760.                                 SA_BYTE            *out,
  761.                                 SA_INT            *outlenp
  762.                                 );
  763. extern SA_RETCODE SA_EXPORT        sa_uncompress(
  764.                                 SA_BYTE            *in,
  765.                                 SA_INT            inlen,
  766.                                 SA_BYTE            *out,
  767.                                 SA_INT            *outlenp
  768.                                 );
  769.  
  770. #if defined(__cplusplus)
  771. }
  772. #endif    /* defined(__cplusplus) */
  773.  
  774. #endif /* __SAMBAR_H__ */
  775.