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