/*
** Copyright 2000-2004 University of Illinois Board of Trustees
** Copyright 2000-2004 Mark D. Roth
** All rights reserved.
**
** internal.h - internal header file for libphclient
**
** Mark D. Roth <roth@feep.net>
*/
#include <stdio.h>
#include <compat.h>
#include <phclient.h>
#include <ph_buffer.h>
#include <ph_mmgr.h>
#define PH_BUF_SIZE 8192 /* useful constant */
#define PH_SERVICE "csnet-ns" /* service name from /etc/services */
#define PH_PORT 105 /* fallback port number */
/* useful macros */
#define BIT_ISSET(bitfield, opt) ((bitfield) & (opt))
#define BIT_SET(bitfield, opt) ((bitfield) |= (opt))
#define BIT_CLEAR(bitfield, opt) ((bitfield) &= ~(opt))
#define BIT_TOGGLE(bitfield, opt) { \
if (BIT_ISSET(bitfield, opt)) \
BIT_CLEAR(bitfield, opt); \
else \
BIT_SET(bitfield, opt); \
}
/* PH server handle */
struct ph_handle
{
int ph_rfd[2]; /* file descriptor to read from server */
int ph_wfd[2]; /* file descriptor to write to server */
ph_debug_func_t ph_sendhook; /* debug hook for sending */
ph_debug_func_t ph_recvhook; /* debug hook for receiving */
void *ph_hook_data; /* app-supplied ptr to pass to hooks */
ph_buffer_t ph_buf; /* receive buffer */
struct ph_siteinfo *ph_siteinfo; /* siteinfo list */
struct ph_fieldinfo *ph_fieldlist; /* field information */
struct ph_option *ph_options; /* server options */
struct ph_auth *ph_auth; /* currently logged-in user */
ph_mmgr_t ph_mmgr; /* memory management handle */
};
/***** auth.c **********************************************************/
/* auth data for current user */
struct ph_auth
{
char *pa_alias;
int pa_authtype;
void *pa_authkey;
};
/* free ph_auth memory */
void ph_free_auth(struct ph_auth *);
/***** protocol.c ******************************************************/
/* buffer plugin to read from server */
ssize_t ph_buffer_read(void *, char *, size_t);
/* ph_get_response() - read and parse a response from the server. */
int ph_get_response(PH *, int *, char *, size_t);
/*
** ph_parse_response() - utility function to split up ':'-delimited
** sections of the text returned by ph_get_response()
*/
int ph_parse_response(char *, int *, char **, char **);
/* ph_send_command() - send a command to the server */
ssize_t
#ifdef STDC_HEADERS
ph_send_command(PH *, char *, ...);
#else
ph_send_command(PH *, char *, int);
#endif
/*
** ph_dequote_value() - convert a server-parsable quoted value to a literal
** field value. returns number of characters written.
*/
size_t ph_dequote_value(char *, char *, size_t);
/*
** ph_decode_selectors() - decode a ph_fieldselector array into a string
** to send to the server. returns number of characters written.
*/
size_t ph_decode_selectors(struct ph_fieldselector[], char *, size_t);
syntax highlighted by Code2HTML, v. 0.9.1