| version 1.13, 2002/10/24 02:12:35 |
version 1.16, 2004/02/23 09:03:43 |
|
|
| /* $OpenXM: OpenXM/src/kan96xx/plugin/sm1Socket.c,v 1.12 2002/10/24 01:29:00 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/kan96xx/plugin/sm1Socket.c,v 1.15 2003/09/16 02:57:40 takayama Exp $ */ |
| /* msg0s.c */ |
/* msg0s.c */ |
| #include <stdio.h> |
#include <stdio.h> |
| #include <sys/types.h> |
#include <sys/types.h> |
|
|
| #include "sm1Socket.h" |
#include "sm1Socket.h" |
| |
|
| extern int Quiet; |
extern int Quiet; |
| |
static int Post_debug=0; |
| static void errorMsg1s(char *s); |
static void errorMsg1s(char *s); |
| static int getContentLength(char *s); |
static int getContentLength(char *s); |
| static int getReceivedContentLength(char *s); |
static int getReceivedContentLength(char *s); |
| Line 30 struct object KsocketOpen(struct object obj) { |
|
| Line 31 struct object KsocketOpen(struct object obj) { |
|
| int on; |
int on; |
| int tt; |
int tt; |
| extern int errno; |
extern int errno; |
| |
extern int Post_debug; |
| |
|
| |
if ((char *)getenv("OXWEB_DEBUG") != NULL) { |
| |
Post_debug = 1; |
| |
} |
| |
|
| if (obj.tag != Sarray) { |
if (obj.tag != Sarray) { |
| errorMsg1s("KsocketOpen([optional integer,optional string name])"); |
errorMsg1s("KsocketOpen([optional integer,optional string name])"); |
| } |
} |
| Line 173 struct object KsocketAccept(struct object obj) { |
|
| Line 179 struct object KsocketAccept(struct object obj) { |
|
| } |
} |
| s = KopInteger(obj1); |
s = KopInteger(obj1); |
| if ((news = accept(s,NULL,NULL)) < 0) { |
if ((news = accept(s,NULL,NULL)) < 0) { |
| errorMsg1s("Error in accept."); |
fprintf(stderr,"Error in accept. Retrying (KsocketAccept).\n"); |
| |
/* Code added for strange behavior on cygwin. */ |
| |
if ((news = accept(s,NULL,NULL)) < 0) { |
| |
errorMsg1s("Error in accept. Retry failed."); |
| |
} |
| } |
} |
| if (close(s) < 0) { |
if (close(s) < 0) { |
| errorMsg1s("Error in closing the old socket."); |
errorMsg1s("Error in closing the old socket."); |
| Line 209 struct object KsocketAccept2(struct object obj) { |
|
| Line 219 struct object KsocketAccept2(struct object obj) { |
|
| } |
} |
| s = KopInteger(obj1); |
s = KopInteger(obj1); |
| if ((news = accept(s,NULL,NULL)) < 0) { |
if ((news = accept(s,NULL,NULL)) < 0) { |
| errorMsg1s("Error in accept."); |
fprintf(stderr,"Error in accept. Retrying (KsocketAccept2).\n"); |
| |
/* Code added for strange behavior on cygwin. */ |
| |
if ((news = accept(s,NULL,NULL)) < 0) { |
| |
errorMsg1s("Error in accept. Retry failed."); |
| |
} |
| } |
} |
| if (close(s) < 0) { |
if (close(s) < 0) { |
| errorMsg1s("Error in closing the old socket."); |
errorMsg1s("Error in closing the old socket."); |
| Line 399 struct object KsocketRead(struct object obj) { |
|
| Line 413 struct object KsocketRead(struct object obj) { |
|
| errorMsg1s("Select returns 1, but there is no data to read."); |
errorMsg1s("Select returns 1, but there is no data to read."); |
| } |
} |
| }else { /* increase the datasize */ |
}else { /* increase the datasize */ |
| tmp = (char *)GC_malloc(sizeof(char)*2*datasize); |
tmp = (char *)sGC_malloc(sizeof(char)*2*datasize); |
| /*I should use GC_malloc_atomic and free after finishing this function?*/ |
/*I should use sGC_malloc_atomic and free after finishing this function?*/ |
| if (tmp == (char *)NULL) errorMsg1s("Out of Memory."); |
if (tmp == (char *)NULL) errorMsg1s("Out of Memory."); |
| bcopy(data,tmp,totalsize); |
bcopy(data,tmp,totalsize); |
| data = tmp; |
data = tmp; |
| Line 408 struct object KsocketRead(struct object obj) { |
|
| Line 422 struct object KsocketRead(struct object obj) { |
|
| } |
} |
| } |
} |
| |
|
| r = (char *)GC_malloc(sizeof(char)*(totalsize+1)); |
r = (char *)sGC_malloc(sizeof(char)*(totalsize+1)); |
| if (r == (char *)NULL) errorMsg1s("Out of Memory."); |
if (r == (char *)NULL) errorMsg1s("Out of Memory."); |
| bcopy(data,r,totalsize); |
bcopy(data,r,totalsize); |
| r[totalsize] = 0; |
r[totalsize] = 0; |
| Line 582 struct object KsocketReadHTTP(struct object socketObj) |
|
| Line 596 struct object KsocketReadHTTP(struct object socketObj) |
|
| int last; |
int last; |
| int contentLength=-1; |
int contentLength=-1; |
| int socketid; |
int socketid; |
| |
extern int Post_debug; |
| nob = NullObject; |
nob = NullObject; |
| |
|
| if (socketObj.tag != Sarray) { |
if (socketObj.tag != Sarray) { |
| Line 630 struct object KsocketReadHTTP(struct object socketObj) |
|
| Line 645 struct object KsocketReadHTTP(struct object socketObj) |
|
| break; |
break; |
| } |
} |
| } |
} |
| fprintf(stderr,"Waiting in socketReadBlock. flagmax(0d,0a)=%d, content-length=%d, received content-length=%d\n",flagmax,contentLength,getReceivedContentLength(sss)); |
if (Post_debug) { |
| |
fprintf(stderr,"Waiting in socketReadBlock. flagmax(0d,0a)=%d, content-length=%d, received content-length=%d\n",flagmax,contentLength,getReceivedContentLength(sss)); |
| |
} |
| if (strlen(s) == 0) { |
if (strlen(s) == 0) { |
| fprintf(stderr,"No data. Perhaps connection is closed by foreign host.\n"); |
fprintf(stderr,"No data. Perhaps connection is closed by foreign host.\n"); |
| return nob; |
return nob; |
| }else{ |
}else{ |
| /* for debugging. */ |
/* for debugging. */ |
| for (i=0; i<strlen(sss); i++) { |
if (Post_debug) { |
| if ((sss[i] >= ' ') && (sss[i] < 0x7f)) { |
for (i=0; i<strlen(sss); i++) { |
| fprintf(stderr,"%c",sss[i]); |
if ((sss[i] >= ' ') && (sss[i] < 0x7f)) { |
| }else{ |
fprintf(stderr,"%c",sss[i]); |
| fprintf(stderr,"(%3x)",sss[i]); |
}else{ |
| if (sss[i] == 0xa) fprintf(stderr,"\n"); |
fprintf(stderr,"(%3x)",sss[i]); |
| } |
if (sss[i] == 0xa) fprintf(stderr,"\n"); |
| |
} |
| |
|
| |
} |
| |
fprintf(stderr,"\n"); |
| } |
} |
| fprintf(stderr,"\n"); |
|
| } |
} |
| |
|
| if (KsocketSelect0(socketid,-1) != 1) { |
if (KsocketSelect0(socketid,-1) != 1) { |
| Line 665 struct object KsocketReadHTTP(struct object socketObj) |
|
| Line 684 struct object KsocketReadHTTP(struct object socketObj) |
|
| } |
} |
| } |
} |
| if (datasize-1 <= strlen(sss)+strlen(s)) { |
if (datasize-1 <= strlen(sss)+strlen(s)) { |
| tmp = (char *)GC_malloc(sizeof(char)*2*(datasize+strlen(s))+1); |
tmp = (char *)sGC_malloc(sizeof(char)*2*(datasize+strlen(s))+1); |
| if (tmp == (char *)NULL) errorMsg1s("Out of Memory."); |
if (tmp == (char *)NULL) errorMsg1s("Out of Memory."); |
| strcpy(tmp,sss); |
strcpy(tmp,sss); |
| strcat(tmp,s); |
strcat(tmp,s); |
| Line 769 struct object KsocketGetHostName(void) { |
|
| Line 788 struct object KsocketGetHostName(void) { |
|
| if (gethostname(name,1023) != 0) { |
if (gethostname(name,1023) != 0) { |
| return rob; |
return rob; |
| } |
} |
| s = (char *)GC_malloc(sizeof(char)*(strlen(name)+2)); |
s = (char *)sGC_malloc(sizeof(char)*(strlen(name)+2)); |
| if (s == (char *)NULL) errorMsg1s("Out of Memory."); |
if (s == (char *)NULL) errorMsg1s("Out of Memory."); |
| strcpy(s,name); |
strcpy(s,name); |
| return(KpoString(s)); |
return(KpoString(s)); |