in src/generic/url.c [841:985]
int Web_CmdUrlCfg(ClientData clientData,
Tcl_Interp * interp, int objc, Tcl_Obj * CONST objv[])
{
UrlData *urlData = NULL;
/* note: this could be dynamic, but 20 is enough ... */
char *params[20];
int i;
int res;
for (i = SCHEME; i <= QUERYSTRING; i++)
params[i] = (char *) urlElementOpts[i];
params[URLCFGRESET] = "-reset";
params[URLCFGURLFORMAT] = "-urlformat";
params[URLCFGEND] = NULL;
/* --------------------------------------------------------------------------
*
* ----------------------------------------------------------------------- */
WebAssertData(interp, clientData, "Web_CmdUrlCfg", TCL_ERROR)
urlData = (UrlData *) clientData;
/* --------------------------------------------------------------------------
*
* ----------------------------------------------------------------------- */
res = paramGet((ParamList *) urlData->requestData->staticList,
interp, objc, objv, 1);
if (res == TCL_CONTINUE) {
int opt;
Tcl_Obj *tmpObj = NULL;
if (objc <= 1) {
Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
return TCL_ERROR;
}
if (paramGetIndexFromObj
(interp, objv[1], params, "subcommand", 0, &opt) == TCL_ERROR)
return TCL_ERROR;
/* ----------------------------------------------------------------------
* it is one of my options
* -------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
* web::cmdurlcfg -protocol value
* 0 1 2
* ------------------------------------------------------------------- */
if (objc == 3)
tmpObj = objv[2];
else
tmpObj = NULL;
switch ((enum urlElement) opt) {
case SCHEME:
WebAssertObjc(objc > 3, 2, "?value?");
if (urlData->defaultscheme != NULL) {
Tcl_SetObjResult(interp,
Tcl_DuplicateObj(urlData->defaultscheme));
if (tmpObj != NULL) {
Tcl_DecrRefCount(urlData->defaultscheme);
urlData->defaultscheme = Tcl_DuplicateObj(tmpObj);
Tcl_IncrRefCount(urlData->defaultscheme);
}
return TCL_OK;
} else {
Tcl_SetObjResult(interp,
Tcl_NewStringObj(WEB_DEFAULT_SCHEME, -1));
if (tmpObj != NULL) {
if (strcmp(Tcl_GetString(tmpObj), "")) {
urlData->defaultscheme = Tcl_DuplicateObj(tmpObj);
Tcl_IncrRefCount(urlData->defaultscheme);
}
}
return TCL_OK;
}
break;
case HOST:
WebAssertObjc(objc > 3, 2, "?value?");
return handleConfig(interp, &urlData->host, tmpObj, 1);
break;
case PORT:
WebAssertObjc(objc > 3, 2, "?value?");
return handleConfig(interp, &urlData->port, tmpObj, 1);
break;
case SCRIPTNAME:
WebAssertObjc(objc > 3, 2, "?value?");
return handleConfig(interp, &urlData->scriptname, tmpObj, 1);
break;
case PATHINFO:
WebAssertObjc(objc > 3, 2, "?value?");
return handleConfig(interp, &urlData->pathinfo, tmpObj, 1);
break;
case QUERYSTRING:
WebAssertObjc(objc > 3, 2, "?value?");
return handleConfig(interp, &urlData->querystring, tmpObj, 1);
break;
case URLCFGRESET:
WebAssertObjc(objc != 2, 2, NULL);
return resetUrlData(interp, urlData);
break;
case URLCFGURLFORMAT:{
int urlformat = 0;
Tcl_Obj *res = NULL;
Tcl_Obj *tmpres = NULL;
enum urlElement i;
WebAssertObjc(objc > 3, 2, "?value?");
/* format current */
res = Tcl_NewObj();
Tcl_IncrRefCount(res);
for (i = SCHEME; i <= QUERYSTRING; i++) {
if (((urlData->urlformat) & urlElementFlags[i]) != 0) {
tmpres =
Tcl_NewStringObj(&(urlElementOpts[i][1]), -1);
Tcl_ListObjAppendElement(interp, res, tmpres);
}
}
if (tmpObj != NULL) {
/* we have to set it as well */
urlformat = parseUrlFormat(interp, tmpObj);
if (urlformat == 0) {
/* cleanup */
Tcl_DecrRefCount(res);
return TCL_ERROR;
}
urlData->urlformat = urlformat;
}
Tcl_SetObjResult(interp, res);
Tcl_DecrRefCount(res);
return TCL_OK;
break;
}
default:
LOG_MSG(interp, WRITE_LOG | SET_RESULT, __FILE__, __LINE__,
"web::cmdurl", WEBLOG_INFO, "unknown option", NULL);
return TCL_ERROR;
}
}
return res;
}