Merge branch 'socat-2' of file:///home/gerhard/Develop/socat-engine into socat-2

This commit is contained in:
Gerhard Rieger 2008-10-31 23:05:05 +01:00
commit 363fa568ac
4 changed files with 44 additions and 34 deletions

View file

@ -1,5 +1,5 @@
####################### V 2.0.0-b1: ####################### V 2.0.0-b2:
new features: new features:
address chains consisting of inter and endpoint addresses, linked with address chains consisting of inter and endpoint addresses, linked with
@ -27,6 +27,12 @@ new features:
new form of FD address with output/input fd numbers new form of FD address with output/input fd numbers
corrections:
help displayed some option types wrong
under some circumstances shutdown was called multiple times for the
same fd
####################### V 1.7.0.0: ####################### V 1.7.0.0:
new features: new features:

38
test.sh
View file

@ -2207,7 +2207,7 @@ N=$((N+1))
NAME=FILE NAME=FILE
case "$TESTS" in case "$TESTS" in
*%functions%*|*%file%*|*%ignoreeof%*|*%$NAME%*) *%functions%*|*%engine%*|*%file%*|*%ignoreeof%*|*%$NAME%*)
TEST="$NAME: simple echo via file" TEST="$NAME: simple echo via file"
tf="$td/file$N" tf="$td/file$N"
testecho "$N" "$TEST" "" "$tf%$tf,ignoreeof" "$opts" testecho "$N" "$TEST" "" "$tf%$tf,ignoreeof" "$opts"
@ -3244,7 +3244,7 @@ N=$((N+1))
NAME=GOPENFILE NAME=GOPENFILE
case "$TESTS" in case "$TESTS" in
*%functions%*|*%gopen%*|*%file%*|*%ignoreeof%*|*%$NAME%*) *%functions%*|*%engine%*|*%gopen%*|*%file%*|*%ignoreeof%*|*%$NAME%*)
TEST="$NAME: file opening with gopen" TEST="$NAME: file opening with gopen"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
tf1="$td/test$N.1.stdout" tf1="$td/test$N.1.stdout"
@ -3277,7 +3277,7 @@ N=$((N+1))
NAME=GOPENPIPE NAME=GOPENPIPE
case "$TESTS" in case "$TESTS" in
*%functions%*|*%gopen%*|*%pipe%*|*%ignoreeof%*|*%$NAME%*) *%functions%*|*%engine%*|*%gopen%*|*%pipe%*|*%ignoreeof%*|*%$NAME%*)
TEST="$NAME: pipe opening with gopen for reading" TEST="$NAME: pipe opening with gopen for reading"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
tp="$td/pipe$N" tp="$td/pipe$N"
@ -3423,7 +3423,7 @@ N=$((N+1))
#set -vx #set -vx
NAME=IGNOREEOF NAME=IGNOREEOF
case "$TESTS" in case "$TESTS" in
*%functions%*|*%ignoreeof%*|*%$NAME%*) *%functions%*|*%engine%*|*%ignoreeof%*|*%$NAME%*)
TEST="$NAME: ignoreeof on file" TEST="$NAME: ignoreeof on file"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
ti="$td/test$N.file" ti="$td/test$N.file"
@ -3458,7 +3458,7 @@ set +vx
NAME=EXECIGNOREEOF NAME=EXECIGNOREEOF
case "$TESTS" in case "$TESTS" in
*%functions%*|*%ignoreeof%*|*%$NAME%*) *%functions%*|*%engine%*|*%ignoreeof%*|*%$NAME%*)
TEST="$NAME: exec against address with ignoreeof" TEST="$NAME: exec against address with ignoreeof"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
tf="$td/test$N.stdout" tf="$td/test$N.stdout"
@ -4514,7 +4514,7 @@ N=$((N+1))
NAME=TOTALTIMEOUT NAME=TOTALTIMEOUT
case "$TESTS" in case "$TESTS" in
*%functions%*|*%timeout%*|*%$NAME%*) *%functions%*|*%engine%*|*%timeout%*|*%$NAME%*)
TEST="$NAME: socat inactivity timeout" TEST="$NAME: socat inactivity timeout"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
#set -vx #set -vx
@ -4553,7 +4553,7 @@ N=$((N+1))
NAME=IGNOREEOF+TOTALTIMEOUT NAME=IGNOREEOF+TOTALTIMEOUT
case "$TESTS" in case "$TESTS" in
*%functions%*|*%timeout%*|*%ignoreeof%*|*%$NAME%*) *%functions%*|*%engine%*|*%timeout%*|*%ignoreeof%*|*%$NAME%*)
TEST="$NAME: ignoreeof and inactivity timeout" TEST="$NAME: ignoreeof and inactivity timeout"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
#set -vx #set -vx
@ -4592,7 +4592,7 @@ N=$((N+1))
NAME=PROXY2SPACES NAME=PROXY2SPACES
case "$TESTS" in case "$TESTS" in
*%functions%*|*%$NAME%*) *%functions%*|*%proxy%*|*%$NAME%*)
TEST="$NAME: proxy connect accepts status with multiple spaces" TEST="$NAME: proxy connect accepts status with multiple spaces"
if ! eval $NUMCOND; then :; if ! eval $NUMCOND; then :;
elif ! testaddrs proxy >/dev/null; then elif ! testaddrs proxy >/dev/null; then
@ -4888,7 +4888,7 @@ N=$((N+1))
#! #!
NAME=OUTBOUNDIN NAME=OUTBOUNDIN
case "$TESTS" in case "$TESTS" in
*%functions%*|*%$NAME%*) *%functions%*|*%proxy%*|*%$NAME%*)
TEST="$NAME: gender changer via SSL through HTTP proxy, oneshot" TEST="$NAME: gender changer via SSL through HTTP proxy, oneshot"
if ! eval $NUMCOND; then :; if ! eval $NUMCOND; then :;
elif ! feat=$(testaddrs openssl proxy); then elif ! feat=$(testaddrs openssl proxy); then
@ -4975,7 +4975,7 @@ PORT=$((RANDOM+16184))
#! #!
NAME=INTRANETRIPPER NAME=INTRANETRIPPER
case "$TESTS" in case "$TESTS" in
*%functions%*|*%$NAME%*) *%functions%*|*%proxy%*|*%$NAME%*)
TEST="$NAME: gender changer via SSL through HTTP proxy, daemons" TEST="$NAME: gender changer via SSL through HTTP proxy, daemons"
if ! eval $NUMCOND; then :; if ! eval $NUMCOND; then :;
elif ! feat=$(testaddrs openssl proxy); then elif ! feat=$(testaddrs openssl proxy); then
@ -6187,7 +6187,7 @@ N=$((N+1))
NAME=UNIXTODGRAM NAME=UNIXTODGRAM
case "$TESTS" in case "$TESTS" in
*%functions%*|*%unix%*|*%recv%*|*%$NAME%*) *%functions%*|*%engine%*|*%unix%*|*%recv%*|*%$NAME%*)
TEST="$NAME: generic UNIX client connects to datagram socket" TEST="$NAME: generic UNIX client connects to datagram socket"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
ts1="$td/test$N.socket1" ts1="$td/test$N.socket1"
@ -6569,7 +6569,7 @@ fi #false
NAME=UNIXDGRAM NAME=UNIXDGRAM
case "$TESTS" in case "$TESTS" in
*%functions%*|*%unix%*|*%dgram%*|*%$NAME%*) *%functions%*|*%engine%*|*%unix%*|*%dgram%*|*%$NAME%*)
TEST="$NAME: UNIX datagram" TEST="$NAME: UNIX datagram"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
tf="$td/test$N.stdout" tf="$td/test$N.stdout"
@ -6611,7 +6611,7 @@ N=$((N+1))
NAME=UDP4RECV NAME=UDP4RECV
case "$TESTS" in case "$TESTS" in
*%functions%*|*%ip4%*|*%dgram%*|*%udp%*|*%udp4%*|*%recv%*|*%$NAME%*) *%functions%*|*%engine%*|*%ip4%*|*%dgram%*|*%udp%*|*%udp4%*|*%recv%*|*%$NAME%*)
TEST="$NAME: UDP/IPv4 receive" TEST="$NAME: UDP/IPv4 receive"
if ! eval $NUMCOND; then :; else if ! eval $NUMCOND; then :; else
tf="$td/test$N.stdout" tf="$td/test$N.stdout"
@ -7495,7 +7495,7 @@ N=$((N+1))
NAME=COOLWRITE NAME=COOLWRITE
case "$TESTS" in case "$TESTS" in
*%functions%*|*%timeout%*|*%ignoreeof%*|*%coolwrite%*|*%$NAME%*) *%functions%*|*%engine%*|*%timeout%*|*%ignoreeof%*|*%coolwrite%*|*%$NAME%*)
TEST="$NAME: option cool-write" TEST="$NAME: option cool-write"
if ! eval $NUMCOND; then :; if ! eval $NUMCOND; then :;
elif ! testoptions cool-write >/dev/null; then elif ! testoptions cool-write >/dev/null; then
@ -7537,7 +7537,7 @@ N=$((N+1))
# this failed up to socat 1.6.0.0 # this failed up to socat 1.6.0.0
NAME=COOLSTDIO NAME=COOLSTDIO
case "$TESTS" in case "$TESTS" in
*%functions%*|*%timeout%*|*%ignoreeof%*|*%coolwrite%*|*%$NAME%*) *%functions%*|*%engine%*|*%timeout%*|*%ignoreeof%*|*%coolwrite%*|*%$NAME%*)
TEST="$NAME: option cool-write on bidirectional stdio" TEST="$NAME: option cool-write on bidirectional stdio"
# this test starts a socat reader that terminates after receiving one+ # this test starts a socat reader that terminates after receiving one+
# bytes (option readbytes); and a test process that sends two bytes via # bytes (option readbytes); and a test process that sends two bytes via
@ -7902,7 +7902,7 @@ NAME=IP4BROADCAST
# because we receive - in addition to the regular reply - our own broadcast, # because we receive - in addition to the regular reply - our own broadcast,
# we use a token XXXX that is changed to YYYY in the regular reply packet. # we use a token XXXX that is changed to YYYY in the regular reply packet.
case "$TESTS" in case "$TESTS" in
*%functions%*|*%rawip%*|*%rawip4%*|*%ip4%*|*%dgram%*|*%broadcast%*|*%root%*|*%$NAME%*) *%functions%*|*%engine%*|*%rawip%*|*%rawip4%*|*%ip4%*|*%dgram%*|*%broadcast%*|*%root%*|*%$NAME%*)
TEST="$NAME: raw IPv4 broadcast" TEST="$NAME: raw IPv4 broadcast"
if ! eval $NUMCOND; then :; if ! eval $NUMCOND; then :;
elif ! feat=$(testaddrs ip4 rawip) || ! runsip4 >/dev/null; then elif ! feat=$(testaddrs ip4 rawip) || ! runsip4 >/dev/null; then
@ -9029,7 +9029,7 @@ N=$((N+1))
# the reverse direction # the reverse direction
NAME=IGNOREEOFNOBLOCK NAME=IGNOREEOFNOBLOCK
case "$TESTS" in case "$TESTS" in
*%functions%*|*%socket%*|*%ignoreeof%*|*%$NAME%*) *%functions%*|*%engine%*|*%socket%*|*%ignoreeof%*|*%$NAME%*)
TEST="$NAME: ignoreeof does not block other direction" TEST="$NAME: ignoreeof does not block other direction"
# have socat poll in ignoreeof mode. while it waits one second for next check, # have socat poll in ignoreeof mode. while it waits one second for next check,
# we send data in the reverse direction and then the total timeout fires. # we send data in the reverse direction and then the total timeout fires.
@ -9068,7 +9068,7 @@ N=$((N+1))
# test the escape option # test the escape option
NAME=ESCAPE NAME=ESCAPE
case "$TESTS" in case "$TESTS" in
*%functions%*|*%escape%*|*%$NAME%*) *%functions%*|*%engine%*|*%escape%*|*%$NAME%*)
TEST="$NAME: escape character triggers EOF" TEST="$NAME: escape character triggers EOF"
# idea: start socat just echoing input, but apply escape option. send a string # idea: start socat just echoing input, but apply escape option. send a string
# containing the escape character and check if the output is truncated # containing the escape character and check if the output is truncated
@ -9101,7 +9101,7 @@ N=$((N+1))
# test the escape option combined with ignoreeof # test the escape option combined with ignoreeof
NAME=ESCAPE_IGNOREEOF NAME=ESCAPE_IGNOREEOF
case "$TESTS" in case "$TESTS" in
*%functions%*|*%ignoreeof%*|*%escape%*|*%$NAME%*) *%functions%*|*%engine%*|*%ignoreeof%*|*%escape%*|*%$NAME%*)
TEST="$NAME: escape character triggers EOF" TEST="$NAME: escape character triggers EOF"
# idea: start socat just echoing input, but apply escape option. send a string # idea: start socat just echoing input, but apply escape option. send a string
# containing the escape character and check if the output is truncated # containing the escape character and check if the output is truncated

View file

@ -448,14 +448,16 @@ int _socat(xiofile_t *xfd1, xiofile_t *xfd2) {
xioshutdown(sock2, SHUT_WR); xioshutdown(sock2, SHUT_WR);
XIO_RDSTREAM(sock1)->eof = 2; XIO_RDSTREAM(sock1)->eof = 2;
XIO_RDSTREAM(sock1)->ignoreeof = false; XIO_RDSTREAM(sock1)->ignoreeof = false;
sock2->stream.closing = MAX(sock2->stream.closing, 1);
if (/*0 xioparams->lefttoright*/ !XIO_READABLE(sock2)) {
break;
}
} }
} else if (polling && XIO_RDSTREAM(sock1)->ignoreeof) { } else if (polling && XIO_RDSTREAM(sock1)->ignoreeof) {
polling = 0; polling = 0;
} }
if (XIO_RDSTREAM(sock1)->eof >= 2) {
sock2->stream.closing = MAX(sock2->stream.closing, 1);
if (!XIO_READABLE(sock2)) {
break;
}
}
if (bytes2 == 0 || XIO_RDSTREAM(sock2)->eof >= 2) { if (bytes2 == 0 || XIO_RDSTREAM(sock2)->eof >= 2) {
if (XIO_RDSTREAM(sock2)->ignoreeof && if (XIO_RDSTREAM(sock2)->ignoreeof &&
@ -469,14 +471,16 @@ int _socat(xiofile_t *xfd1, xiofile_t *xfd2) {
xioshutdown(sock1, SHUT_WR); xioshutdown(sock1, SHUT_WR);
XIO_RDSTREAM(sock2)->eof = 2; XIO_RDSTREAM(sock2)->eof = 2;
XIO_RDSTREAM(sock2)->ignoreeof = false; XIO_RDSTREAM(sock2)->ignoreeof = false;
sock1->stream.closing = MAX(sock1->stream.closing, 1);
if (/*0 xioparams->righttoleft*/ !XIO_READABLE(sock1)) {
break;
}
} }
} else if (polling && XIO_RDSTREAM(sock2)->ignoreeof) { } else if (polling && XIO_RDSTREAM(sock2)->ignoreeof) {
polling = 0; polling = 0;
} }
if (XIO_RDSTREAM(sock2)->eof >= 2) {
sock1->stream.closing = MAX(sock1->stream.closing, 1);
if (!XIO_READABLE(sock1)) {
break;
}
}
} }
/* close everything that's still open */ /* close everything that's still open */

View file

@ -18,19 +18,19 @@ static const char *optiontypenames[] = {
"SHORT", "SIZE_T", "SOCKADDR", "UNSIGNED-INT", "SHORT", "SIZE_T", "SOCKADDR", "UNSIGNED-INT",
"UNSIGNED-LONG","UNSIGNED-SHORT","MODE_T", "GID_T", "UNSIGNED-LONG","UNSIGNED-SHORT","MODE_T", "GID_T",
"UID_T", "INT[3]", "STRUCT-TIMEVAL", "STRUCT-TIMESPEC", "UID_T", "INT[3]", "STRUCT-TIMEVAL", "STRUCT-TIMESPEC",
"DOUBLE", "STRING-NULL", "LONG-LONG", "OFF_T",
"OFF64_T", "INT:INT", "INT:INTP", "INT:BIN",
"INT:STRING", "INT:INT:INT", "INT:INT:BIN", "INT:INT:STRING",
"IP4NAME",
#if HAVE_STRUCT_LINGER #if HAVE_STRUCT_LINGER
"STRUCT-LINGER", "STRUCT-LINGER",
#endif #endif
"DOUBLE", "STRING-NULL", "LONG-LONG",
"OFF_T", "OFF64_T",
#if HAVE_STRUCT_IP_MREQN #if HAVE_STRUCT_IP_MREQN
"STRUCT-IP_MREQN", "STRUCT-IP_MREQN",
#elif HAVE_STRUCT_IP_MREQ #elif HAVE_STRUCT_IP_MREQ
"STRUCT-IP_MREQ", "STRUCT-IP_MREQ",
#endif #endif
"IP4NAME",
"INT:INT", "INT:INTP", "INT:BIN", "INT:STRING",
"INT:INT:INT", "INT:INT:BIN", "INT:INT:STRING",
} ; } ;