summaryrefslogtreecommitdiff
path: root/ext/hyperwave/hg_comm.c
diff options
context:
space:
mode:
authorUwe Steinmann <steinm@php.net>1999-10-21 15:15:27 +0000
committerUwe Steinmann <steinm@php.net>1999-10-21 15:15:27 +0000
commit01400c0c1529e1529b60a0f158b13e1938ee426e (patch)
tree27a38939aa10e66d54d3072792e1a9dbe7f0a739 /ext/hyperwave/hg_comm.c
parent4703eb404da486fab544f30800bd4dcadca5d0ea (diff)
downloadphp-git-01400c0c1529e1529b60a0f158b13e1938ee426e.tar.gz
Added hw_mapid(), read comment in hg_comm.c
Diffstat (limited to 'ext/hyperwave/hg_comm.c')
-rw-r--r--ext/hyperwave/hg_comm.c59
1 files changed, 56 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];