Browse Source

Added hw_mapid(), read comment in hg_comm.c

experimetnal/RETURN_REF_PATCH
Uwe Steinmann 27 years ago
parent
commit
01400c0c15
  1. 59
      ext/hyperwave/hg_comm.c
  2. 2
      ext/hyperwave/hg_comm.h
  3. 32
      ext/hyperwave/hw.c
  4. 1
      ext/hyperwave/php3_hyperwave.h

59
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];

2
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);

32
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) {

1
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

Loading…
Cancel
Save