summaryrefslogtreecommitdiff
path: root/ext/mnogosearch/php_mnogo.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mnogosearch/php_mnogo.c')
-rw-r--r--ext/mnogosearch/php_mnogo.c297
1 files changed, 144 insertions, 153 deletions
diff --git a/ext/mnogosearch/php_mnogo.c b/ext/mnogosearch/php_mnogo.c
index 81a8aa310d..82355eb7ba 100644
--- a/ext/mnogosearch/php_mnogo.c
+++ b/ext/mnogosearch/php_mnogo.c
@@ -3,9 +3,9 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 4 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
+ | Copyright (c) 1997-2003 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -77,7 +77,7 @@
#define UDM_PARAM_HLBEG 19
#define UDM_PARAM_HLEND 20
#define UDM_PARAM_SYNONYM 21
-#define UDM_PARAM_SEARCHD 22
+#define UDM_PARAM_SEARCHD 22 /* unused */
#define UDM_PARAM_QSTRING 23
#define UDM_PARAM_REMOTE_ADDR 24
#define UDM_PARAM_QUERY 25
@@ -156,11 +156,6 @@ function_entry mnogosearch_functions[] = {
#if UDM_VERSION_ID >= 30200
PHP_FE(udm_check_charset, NULL)
-#if UDM_VERSION_ID == 30203
- PHP_FE(udm_open_stored, NULL)
- PHP_FE(udm_check_stored,NULL)
- PHP_FE(udm_close_stored,NULL)
-#endif
#if UDM_VERSION_ID >= 30203
PHP_FE(udm_crc32, NULL)
#endif
@@ -168,12 +163,16 @@ function_entry mnogosearch_functions[] = {
PHP_FE(udm_parse_query_string, NULL)
PHP_FE(udm_make_excerpt, NULL)
PHP_FE(udm_set_agent_param_ex, NULL)
+ PHP_FE(udm_get_agent_param_ex, NULL)
PHP_FE(udm_get_res_field_ex, NULL)
#endif
#if UDM_VERSION_ID >= 30211
PHP_FE(udm_hash32, NULL)
PHP_FE(udm_alloc_agent_array, NULL)
#endif
+#if UDM_VERSION_ID >= 30216
+ PHP_FE(udm_store_doc_cgi, NULL)
+#endif
#endif
PHP_FE(udm_alloc_agent, NULL)
@@ -317,7 +316,6 @@ DLEXPORT PHP_MINIT_FUNCTION(mnogosearch)
REGISTER_LONG_CONSTANT("UDM_PARAM_HLEND", UDM_PARAM_HLEND,CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("UDM_PARAM_SYNONYM", UDM_PARAM_SYNONYM,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCHD", UDM_PARAM_SEARCHD,CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("UDM_PARAM_STORED", UDM_PARAM_STORED,CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("UDM_PARAM_GROUPBYSITE", UDM_PARAM_GROUPBYSITE,CONST_CS | CONST_PERSISTENT);
@@ -908,18 +906,6 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
#endif
break;
- case UDM_PARAM_SEARCHD:
-#if UDM_VERSION_ID <= 30203
- UdmSDCLientListAdd(&(Agent->Conf->sdcl),val);
- {
- size_t i;
- for(i=0;i<Agent->Conf->sdcl.nclients;i++){
- UdmSDCLientListAdd(&Agent->sdcl,Agent->Conf->sdcl.Clients[i].addr);
- }
- }
-#endif
- break;
-
case UDM_PARAM_QSTRING:
#if UDM_VERSION_ID >= 30204
UdmVarListReplaceStr(&Agent->Conf->Vars,"QUERY_STRING",val);
@@ -1472,6 +1458,7 @@ DLEXPORT PHP_FUNCTION(udm_clear_search_limits)
if ((!strcasecmp("ul",Agent->Conf->Vars.Var[i].name))||
(!strcasecmp("cat",Agent->Conf->Vars.Var[i].name))||
(!strcasecmp("t",Agent->Conf->Vars.Var[i].name))||
+ (!strcasecmp("type",Agent->Conf->Vars.Var[i].name))||
(!strcasecmp("lang",Agent->Conf->Vars.Var[i].name))) {
UDM_FREE(Agent->Conf->Vars.Var[i].name);
UDM_FREE(Agent->Conf->Vars.Var[i].val);
@@ -1553,136 +1540,6 @@ DLEXPORT PHP_FUNCTION(udm_crc32)
/* }}} */
#endif
-#if UDM_VERSION_ID == 30203
-
-static ssize_t UdmRecvAll(int s, void *buf, size_t len, int flags) {
- size_t received = 0, r;
- char *b = buf;
- while ( (received < len) && ((r = recv(s, &b[received], len - received, flags)) >= 0 ) ) {
- received += r;
- }
- return received;
-}
-
-
-/* {{{ proto int udm_open_stored(int agent, string storedaddr)
- Open connection to stored */
-DLEXPORT PHP_FUNCTION(udm_open_stored)
-{
- pval ** yyagent, ** yyaddr;
-
- int s;
- char * addr;
- const char *hello = "F\0";
-
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent, &yyaddr)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-
- convert_to_string_ex(yyaddr);
- addr = Z_STRVAL_PP(yyaddr);
-
- UdmReplaceStrVar(Agent->Conf->vars,"StoredAddr",addr,UDM_VARSRC_GLOBAL);
- Agent->Conf->stored_addr = strdup(UdmFindStrVar(Agent->Conf->vars, "StoredAddr", "localhost"));
-
- s = UdmStoreOpen(Agent->Conf);
-
- if (s >= 0) {
- send(s, hello, 1, 0);
- RETURN_LONG(s);
- } else RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int udm_close_stored(int agent, int link)
- Open connection to stored */
-DLEXPORT PHP_FUNCTION(udm_close_stored)
-{
- pval ** yylink, ** yyagent;
-
- int s;
- unsigned int rec_id = 0;
-
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent, &yylink)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-
- convert_to_long_ex(yylink);
- s = Z_LVAL_PP(yylink);
-
-
- send(s, &rec_id, sizeof(rec_id), 0);
- closesocket(s);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_check_stored(int agent, int link, string doc_id)
- Open connection to stored */
-DLEXPORT PHP_FUNCTION(udm_check_stored)
-{
- pval ** yyid, ** yylink, ** yyagent;
-
- int s;
- unsigned int rec_id = 0;
- int store_found;
-
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 3: {
- if (zend_get_parameters_ex(3, &yyagent, &yylink, &yyid)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-
- convert_to_long_ex(yylink);
- s = Z_LVAL_PP(yylink);
-
- convert_to_string_ex(yyid);
-
- rec_id=strtoul(Z_STRVAL_PP(yyid),NULL,10);
-
- send(s, &rec_id, sizeof(rec_id), 0);
- if (UdmRecvAll(s, &store_found, sizeof(store_found), MSG_WAITALL) < 0) {
- RETURN_LONG(store_found);
- } else RETURN_FALSE;
-}
-/* }}} */
-#endif
-
#if UDM_VERSION_ID >= 30204
/* {{{ proto int udm_parse_query_string(int agent, string str)
Parses query string, initialises variables and search limits taken from it */
@@ -1838,6 +1695,36 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex)
RETURN_TRUE;
}
+/* {{{ proto string udm_get_agent_param_ex(int agent, string field)
+ Fetch mnoGoSearch environment parameters */
+DLEXPORT PHP_FUNCTION(udm_get_agent_param_ex)
+{
+ pval **yyagent, **yyfield_name;
+
+ UDM_AGENT * Agent;
+ int row;
+ char *field;
+
+ switch(ZEND_NUM_ARGS()){
+ case 2: {
+ if (zend_get_parameters_ex(2, &yyagent,&yyfield_name)==FAILURE){
+ RETURN_FALSE;
+ }
+ convert_to_string_ex(yyfield_name);
+ field = Z_STRVAL_PP(yyfield_name);
+ }
+ break;
+ default:
+ WRONG_PARAM_COUNT;
+ break;
+ }
+
+ ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
+
+ RETURN_STRING((char *)UdmVarListFindStr(&Agent->Conf->Vars,field,""),1);
+}
+/* }}} */
+
/* {{{ proto string udm_get_res_field_ex(int res, int row, string field)
Fetch mnoGoSearch result field */
DLEXPORT PHP_FUNCTION(udm_get_res_field_ex)
@@ -1881,6 +1768,110 @@ DLEXPORT PHP_FUNCTION(udm_get_res_field_ex)
/* }}} */
#endif
+#if UDM_VERSION_ID >= 30216
+/* {{{ proto int udm_store_doc_cgi(int agent)
+ Get CachedCopy of document and return TRUE if cached copy found */
+DLEXPORT PHP_FUNCTION(udm_store_doc_cgi)
+{
+ pval ** yyagent;
+ UDM_AGENT * Agent;
+ int id=-1;
+
+ const char *htok;
+ char *last = NULL;
+ UDM_DOCUMENT *Doc;
+ UDM_RESULT *Res;
+ UDM_HTMLTOK tag;
+ char *HDoc=NULL;
+ char *HEnd=NULL;
+ char ch;
+ const char *content_type, *charset;
+ UDM_CHARSET *cs;
+
+ switch(ZEND_NUM_ARGS()){
+ case 1: {
+ if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
+ RETURN_FALSE;
+ }
+ }
+ break;
+ default:
+ WRONG_PARAM_COUNT;
+ break;
+ }
+ ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
+
+ Doc=UdmDocInit(NULL);
+ Res=UdmResultInit(NULL);
+
+ UdmPrepare(Agent,Res);
+ UdmVarListReplaceStr(&Doc->Sections, "URL", UdmVarListFindStr(&Agent->Conf->Vars, "URL", "0"));
+ UdmURLAction(Agent, Doc, UDM_URL_ACTION_GET_CACHED_COPY);
+ UdmVarListReplaceLst(&Agent->Conf->Vars, &Doc->Sections, NULL, "*");
+
+ charset = UdmVarListFindStr(&Agent->Conf->Vars,"Charset","iso-8859-1");
+ cs = UdmGetCharSet(charset);
+
+ /* UnStore Doc, Highlight and Display */
+
+ content_type = UdmVarListFindStr(&Agent->Conf->Vars, "Content-Type", "text/html");
+
+ if(!Doc->Buf.content) {
+ UdmResultFree(Res);
+ UdmDocFree(Doc);
+ UDM_FREE(HDoc);
+
+ RETURN_FALSE;
+ }
+
+ HEnd=HDoc = (char*)UdmMalloc(UDM_MAXDOCSIZE + 32);
+ *HEnd='\0';
+
+ if (strncasecmp(content_type, "text/plain", 10) == 0) {
+ sprintf(HEnd, "<pre>\n");
+ HEnd += strlen(HEnd);
+ }
+
+ UdmHTMLTOKInit(&tag);
+ for(htok = UdmHTMLToken(Doc->Buf.content, (const char **)&last, &tag) ; htok ;) {
+ switch(tag.type) {
+ case UDM_HTML_COM:
+ case UDM_HTML_TAG:
+ memcpy(HEnd,htok,(size_t)(last-htok));
+ HEnd+=last-htok;
+ HEnd[0]='\0';
+ UdmHTMLParseTag(&tag,Doc);
+ break;
+ case UDM_HTML_TXT:
+ ch = *last; *last = '\0';
+ if (tag.title || tag.script) {
+ sprintf(HEnd, "%s", UdmHlConvert(NULL, htok, cs, cs));
+ } else {
+ sprintf(HEnd, "%s", UdmHlConvert(&Res->WWList, htok, cs, cs));
+ }
+ HEnd=UDM_STREND(HEnd);
+ *last = ch;
+ break;
+ }
+ htok = UdmHTMLToken(NULL, (const char **)&last, &tag);
+ }
+
+ if (strncasecmp(content_type, "text/plain", 10) == 0) {
+ sprintf(HEnd, "</pre>\n");
+ HEnd += strlen(HEnd);
+ }
+
+ UdmVarListAddStr(&Agent->Conf->Vars, "document", HDoc);
+
+ UdmResultFree(Res);
+ UdmDocFree(Doc);
+ UDM_FREE(HDoc);
+
+ RETURN_TRUE;
+}
+/* }}} */
+#endif
+
#if UDM_VERSION_ID >= 30211
/* {{{ proto int udm_alloc_agent_array(array dbaddr)
Allocate mnoGoSearch session */
@@ -2152,7 +2143,7 @@ DLEXPORT PHP_FUNCTION(udm_get_res_field)
#endif
break;
- case UDM_FIELD_CATEGORY:
+ case UDM_FIELD_CATEGORY:
#if UDM_VERSION_ID >= 30204
RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Category",""),1);
#else
@@ -2161,7 +2152,7 @@ DLEXPORT PHP_FUNCTION(udm_get_res_field)
break;
#if UDM_VERSION_ID >= 30203
- case UDM_FIELD_LANG:
+ case UDM_FIELD_LANG:
#if UDM_VERSION_ID >= 30204
RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Content-Language",""),1);
#else