blob: 87a05c88bf6e6ef637f083365acf80d444cc78b7 [file] [log] [blame]
/* rivet.h: */
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
#ifndef _RIVET_H_
#define _RIVET_H_
#include <tcl.h>
#include "rivet_types.h"
typedef int rivet_req_ctype;
/* This is for windows. */
#ifdef BUILD_rivet
#undef TCL_STORAGE_CLASS
#define TCL_STORAGE_CLASS DLLEXPORT
#endif /* BUILD_rivet */
#define STREQU(s1,s2) (s1[0] == s2[0] && strcmp(s1, s2) == 0)
#define STRNEQU(s1,s2) (s1[0] == s2[0] && strncmp(s1, s2, strlen(s2)) == 0)
#define RIVET_NS "::rivet"
#define RIVET_TCL_PACKAGE "rivet"
#define RIVETLIB_TCL_PACKAGE "rivetlib"
#define RIVET_MSG_BUFFER_SIZE 512
/* Macros to access and check thread private data */
#define RIVET_PRIVATE_DATA(thread_key,private_p) \
ap_assert (apr_threadkey_private_get ((void **)&private_p,thread_key) == APR_SUCCESS);
#define RIVET_PRIVATE_DATA_NOT_NULL(thread_key,private_p) \
RIVET_PRIVATE_DATA(thread_key,private_p) \
ap_assert (private_p != NULL);
/* macros defining Tcl commands */
#define TCL_CMD_HEADER(cmd) \
static int cmd(\
ClientData clientData,\
Tcl_Interp *interp,\
int objc,\
Tcl_Obj *CONST objv[])
#define TCL_OBJ_CMD( name, func ) \
Tcl_CreateObjCommand( interp, /* Tcl interpreter */\
name, /* Function name in Tcl */\
func, /* C function name */\
NULL, /* Client Data */\
(Tcl_CmdDeleteProc *)NULL /* Tcl Delete Prov */)
/* RIVET_OBJ_CMD creates a command in the RIVET_NS namespace. Commands
* are exported from the RIVET_NS (::rivet) namespace in the init.tcl
* script accordingly to configuration switches passed to ./configure
* (see configure.ac)
*/
/* We now pass the thread private data to the
* Tcl command's ClientData
*/
#define RIVET_OBJ_CMD( name, func, private_p) \
Tcl_CreateObjCommand( interp, /* Tcl interpreter */\
RIVET_NS "::" name, /* Function name in Tcl */\
func, /* C function name */\
private_p, /* Client Data */\
(Tcl_CmdDeleteProc *)NULL /* Tcl Delete Prov */);
#define RIVET_EXPORT_CMD(interp,ns,cmdname) Tcl_Export(interp,ns,cmdname,0);
/*
* Pointer in r is checked and in case Rivet_NoRequestRec is
* called returning TCL_ERROR. This macro is used (and often
* is the first code like) in commands that must ascertain
* the request_rec object pointer in globals is valid
* (when a request processing ends it's set to NULL)
*/
#define CHECK_REQUEST_REC(p,cmd_name) \
if (p == NULL) return TCL_OK;\
if (p->r == NULL)\
{\
Rivet_NoRequestRec(interp,Tcl_NewStringObj(cmd_name,-1));\
return TCL_ERROR;\
}
EXTERN int Rivet_Init(Tcl_Interp *interp);
EXTERN int Rivet_InitList(Tcl_Interp *interp);
EXTERN int Rivet_InitCrypt(Tcl_Interp *interp);
EXTERN int Rivet_InitWWW(Tcl_Interp *interp);
#endif
/* _RIVET_H_ */