diff options
author | Uwe Steinmann <steinm@php.net> | 1999-10-21 15:15:27 +0000 |
---|---|---|
committer | Uwe Steinmann <steinm@php.net> | 1999-10-21 15:15:27 +0000 |
commit | 01400c0c1529e1529b60a0f158b13e1938ee426e (patch) | |
tree | 27a38939aa10e66d54d3072792e1a9dbe7f0a739 | |
parent | 4703eb404da486fab544f30800bd4dcadca5d0ea (diff) | |
download | php-git-01400c0c1529e1529b60a0f158b13e1938ee426e.tar.gz |
Added hw_mapid(), read comment in hg_comm.c
-rw-r--r-- | ext/hyperwave/hg_comm.c | 59 | ||||
-rw-r--r-- | ext/hyperwave/hg_comm.h | 2 | ||||
-rw-r--r-- | ext/hyperwave/hw.c | 32 | ||||
-rw-r--r-- | ext/hyperwave/php3_hyperwave.h | 1 |
4 files changed, 91 insertions, 3 deletions
diff --git a/ext/hyperwave/hg_comm.c b/ext/hyperwave/hg_comm.c index d296fff206..915c4e1ce4 100644 --- a/ext/hyperwave/hg_comm.c +++ b/ext/hyperwave/hg_comm.c @@ -68,8 +68,11 @@ int version = HW_VERSION; virtual. This means whenever an object is requested a new id is generated for this session. Wavemaster and Harmony set this flag. How do I know? tcpdump tells - a lot if investigate the output. - int version = HW_VERSION | F_DISTRIBUTED; */ + a lot if the output is investigated. The bit is also + need to allow access on other server through the local + server. The hw_mapid() function won't work unless you + set F_DISTRIBUTED */ +/* int version = HW_VERSION | F_DISTRIBUTED; */ /* int version = HW_VERSION | F_DISTRIBUTED | F_COMPRESSED; */ static int msgid = 1; static int sock_flags = -1; @@ -516,7 +519,10 @@ char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char break; default: newtext = fnInsStr(newtext, cur_ptr->end+offset, "</A>"); - snprintf(istr, BUFFERLEN, "<A HREF='%s' %s>", cur_ptr->link, cur_ptr->htmlattr == NULL ? "" : cur_ptr->htmlattr); + if(cur_ptr->fragment) + snprintf(istr, BUFFERLEN, "<A HREF='%s#%s' %s>", cur_ptr->link, cur_ptr->fragment, cur_ptr->htmlattr == NULL ? "" : cur_ptr->htmlattr); + else + snprintf(istr, BUFFERLEN, "<A HREF='%s' %s>", cur_ptr->link, cur_ptr->htmlattr == NULL ? "" : cur_ptr->htmlattr); } } else { switch(cur_ptr->linktype) { @@ -4682,6 +4688,53 @@ int send_getsrcbydest(int sockfd, hw_objectID objectID, char ***childrec, int *c return(0); } +int send_mapid(int sockfd, int servid, hw_objectID id, int *virtid) +{ + hg_msg msg, *retmsg; + int length, i, error; + char *tmp; + int *ptr, *ptr1; + + length = HEADER_LENGTH + 2 * sizeof(hw_objectID); + + build_msg_header(&msg, length, msgid++, HG_MAPID); + + if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { + lowerror = LE_MALLOC; + return(-1); + } + + tmp = build_msg_int(msg.buf, servid); + tmp = build_msg_int(tmp, id); + + if (-1 == send_hg_msg(sockfd, &msg, length)) { + efree(msg.buf); + return(-2); + } + + efree(msg.buf); + retmsg = recv_hg_msg(sockfd); + if ( retmsg == NULL ) { + return(-3); + } + + ptr = (int *) retmsg->buf; + if(ptr == NULL) { + if(retmsg) efree(retmsg); + return -1; + } + if(*ptr++ == 0) { + *virtid = *ptr; + } else { + error = *((int *) retmsg->buf); + efree(retmsg->buf); + efree(retmsg); + return error; + } + + return(0); +} + #define BUFFERLEN 200 char *get_hw_info(hw_connection *conn) { char temp[BUFFERLEN]; diff --git a/ext/hyperwave/hg_comm.h b/ext/hyperwave/hg_comm.h index 047bb855a1..5056060310 100644 --- a/ext/hyperwave/hg_comm.h +++ b/ext/hyperwave/hg_comm.h @@ -74,6 +74,7 @@ #define PUTDOCUMENT_MESSAGE 38 #define GETREMOTE_MESSAGE 39 #define GETREMOTECHILDREN_MESSAGE 40 +#define HG_MAPID 43 #define CHILDREN_MESSAGE 44 #define GETCGI_MESSAGE 45 #define PIPECGI_MESSAGE 46 @@ -200,6 +201,7 @@ extern int send_insertobject(int sockfd, char *objrec, char *parms, hw_objectID extern int send_insdoc(int sockfd, hw_objectID objectID, char *objrec, char *text, hw_objectID *new_objectID); extern int send_incollections(int sockfd, int retcol, int cobjids, hw_objectID *objectIDs, int ccollids, hw_objectID *collIDs, int *count, hw_objectID **retIDs); extern int send_getsrcbydest(int sockfd, hw_objectID objid, char ***childrec, int *count); +extern int send_mapid(int sockfd, int servid, hw_objectID id, int *virtid); extern int send_dummy(int sockfd, hw_objectID objectID, int msgid, char **attributes); extern char *get_hw_info(hw_connection *conn); diff --git a/ext/hyperwave/hw.c b/ext/hyperwave/hw.c index 31caae4a87..87925916c7 100644 --- a/ext/hyperwave/hw.c +++ b/ext/hyperwave/hw.c @@ -110,6 +110,7 @@ function_entry hw_functions[] = { PHP_FE(hw_getrellink, NULL) PHP_FE(hw_who, NULL) PHP_FE(hw_stat, NULL) + PHP_FE(hw_mapid, NULL) PHP_FE(hw_dummy, NULL) {NULL, NULL, NULL} }; @@ -3586,6 +3587,37 @@ PHP_FUNCTION(hw_getsrcbydestobj) { } /* }}} */ +/* {{{ proto int hw_mapid(int link, int serverid, int destid) + Returns virtual object id of document on remote hw server */ +PHP_FUNCTION(hw_mapid) { + pval *arg1, *arg2, *arg3; + int link, type, servid, id, virtid; + hw_connection *ptr; + + if (ARG_COUNT(ht) != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long(arg1); + convert_to_long(arg2); + convert_to_long(arg3); + link=arg1->value.lval; + servid=arg2->value.lval; + id=arg3->value.lval; + ptr = php3_list_find(link,&type); + if(!ptr || (type!=HwSG(le_socketp) && type!=HwSG(le_psocketp))) { + php3_error(E_WARNING,"Unable to find file identifier %d",link); + RETURN_FALSE; + } + + set_swap(ptr->swap_on); + if (0 != (ptr->lasterror = send_mapid(ptr->socket, servid, id, &virtid))) { + php3_error(E_WARNING, "send_command (mapid) returned %d\n", ptr->lasterror); + RETURN_FALSE; + } + RETURN_LONG(virtid); +} +/* }}} */ + /* {{{ proto string hw_getrellink(int link, int rootid, int sourceid, int destid) Get link form source to dest relative to rootid */ PHP_FUNCTION(hw_getrellink) { diff --git a/ext/hyperwave/php3_hyperwave.h b/ext/hyperwave/php3_hyperwave.h index f911c56fbb..c7f04f32fb 100644 --- a/ext/hyperwave/php3_hyperwave.h +++ b/ext/hyperwave/php3_hyperwave.h @@ -156,6 +156,7 @@ PHP_FUNCTION(hw_getrellink); PHP_FUNCTION(hw_dummy); PHP_FUNCTION(hw_who); PHP_FUNCTION(hw_stat); +PHP_FUNCTION(hw_mapid); #else #define hw_module_ptr NULL |