]> granicus.if.org Git - php/commitdiff
Added hw_mapid(), read comment in hg_comm.c
authorUwe Steinmann <steinm@php.net>
Thu, 21 Oct 1999 15:15:27 +0000 (15:15 +0000)
committerUwe Steinmann <steinm@php.net>
Thu, 21 Oct 1999 15:15:27 +0000 (15:15 +0000)
ext/hyperwave/hg_comm.c
ext/hyperwave/hg_comm.h
ext/hyperwave/hw.c
ext/hyperwave/php3_hyperwave.h

index d296fff206a3b9d846685eebcfd8fff33f1a4bd1..915c4e1ce42ec7a66c052304b86905096f9bab40 100644 (file)
@@ -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];
index 047bb855a162ea0c0a3cd5ff6b858f5abd3ff808..5056060310501095b4b08f6f63e3521e362165c7 100644 (file)
@@ -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);
 
index 31caae4a879661866b6253905becb8d44171f108..87925916c776e61ecfe926dcfb2289da1033e7b2 100644 (file)
@@ -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) {
index f911c56fbb2023fa905734fbde628edf5cf9fc4d..c7f04f32fbeb18008db24ab1ea10e76a23be334a 100644 (file)
@@ -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