.description = N_("Unauthenticated RFC1661/RFC1662 PPP over TLS, for testing"),
.flags = OC_PROTO_PROXY | OC_PROTO_HIDDEN,
.tcp_connect = nullppp_connect,
- .tcp_mainloop = ppp_mainloop,
+ .tcp_mainloop = nullppp_mainloop,
.add_http_headers = http_common_headers,
.obtain_cookie = nullppp_obtain_cookie,
}
#include <sys/types.h>
#include "openconnect-internal.h"
+#include "ppp.h"
int nullppp_obtain_cookie(struct openconnect_info *vpninfo)
{
int ret;
int ipv4, ipv6, hdlc;
- /* XX: cookie hack. Use -C hdlc,noipv4,noipv6 on the
+ /* XX: cookie hack. Use -C hdlc,noipv4,noipv6,term on the
* command line to set options. */
hdlc = strstr(vpninfo->cookie, "hdlc") ? 1 : 0;
ipv4 = strstr(vpninfo->cookie, "noipv4") ? 0 : 1;
return ret;
}
+
+int nullppp_mainloop(struct openconnect_info *vpninfo, int *timeout, int readable)
+{
+ if (vpninfo->ppp->ppp_state >= PPPS_NETWORK &&
+ strstr(vpninfo->cookie, "term")) {
+ vpninfo->got_cancel_cmd = 1;
+ vpn_progress(vpninfo, PRG_ERR,
+ _("Terminating because nullppp has reached network state.\n"));
+ }
+
+ return ppp_mainloop(vpninfo, timeout, readable);
+}
. `dirname $0`/common.sh
FINGERPRINT="--servercert=d66b507ae074d03b02eafca40d35f87dd81049d3"
-CLIPID=$SOCKDIR/oc-pid.$$.tmp
CERT=$certdir/server-cert.pem
KEY=$certdir/server-key.pem
IPV4_SUCCESS_2="sent [IPCP ConfAck "
IPV6_SUCCESS_1="rcvd [IPV6CP ConfAck "
IPV6_SUCCESS_2="sent [IPV6CP ConfAck "
+TIMEOUT_3S_IDLE="idle 3"
echo "Testing PPP ... "
launch_simple_pppd $CERT $KEY $HDLC_YES $IPV4_YES $OFFER_DNS $IPV6_YES 2>&1
wait_server "$PID"
start=$(date +%s)
-LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "hdlc" -b --pid-file=$CLIPID >/dev/null 2>&1
-kill $(cat $CLIPID) > /dev/null 2>&1
+LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "hdlc,term" -Ss '' >/dev/null 2>&1
took=$(( $(date +%s) - start ))
if grep -qF "$IPV4_SUCCESS_1" $LOGFILE && grep -qF "$IPV4_SUCCESS_2" $LOGFILE && grep -qF "$IPV6_SUCCESS_1" $LOGFILE && grep -qF "$IPV6_SUCCESS_2" $LOGFILE; then
echo "ok (took $took seconds)"
launch_simple_pppd $CERT $KEY $HDLC_YES $IPV4_YES $OFFER_DNS $IPV6_YES $NO_HDR_COMP 2>&1
wait_server "$PID"
start=$(date +%s)
-LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "hdlc" -b --pid-file=$CLIPID >/dev/null 2>&1
-kill $(cat $CLIPID) > /dev/null 2>&1
+LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "hdlc,term" -Ss '' >/dev/null 2>&1
took=$(( $(date +%s) - start ))
if grep -qF "$IPV4_SUCCESS_1" $LOGFILE && grep -qF "$IPV4_SUCCESS_2" $LOGFILE && grep -qF "$IPV6_SUCCESS_1" $LOGFILE && grep -qF "$IPV6_SUCCESS_2" $LOGFILE; then
echo "ok (took $took seconds)"
launch_simple_pppd $CERT $KEY $HDLC_NO $IPV4_YES $OFFER_DNS $IPV6_YES 2>&1
wait_server "$PID"
start=$(date +%s)
-LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT -b --pid-file=$CLIPID >/dev/null 2>&1
-kill $(cat $CLIPID) > /dev/null 2>&1
+LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "term" -Ss '' >/dev/null 2>&1
took=$(( $(date +%s) - start ))
if grep -qF "$IPV4_SUCCESS_1" $LOGFILE && grep -qF "$IPV4_SUCCESS_2" $LOGFILE && grep -qF "$IPV6_SUCCESS_1" $LOGFILE && grep -qF "$IPV6_SUCCESS_2" $LOGFILE; then
echo "ok (took $took seconds)"
launch_simple_pppd $CERT $KEY $HDLC_YES $NO_JUNK_COMP $IPV4_YES $IPV6_NO 2>&1
wait_server "$PID"
start=$(date +%s)
-LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "hdlc" -b --pid-file=$CLIPID >/dev/null 2>&1
-kill $(cat $CLIPID) > /dev/null 2>&2
+LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "hdlc,term" -Ss '' >/dev/null 2>&1
took=$(( $(date +%s) - start ))
if grep -qF "$IPV4_SUCCESS_1" $LOGFILE && grep -qF "$IPV4_SUCCESS_2" $LOGFILE; then
echo "ok (took $took seconds)"
cleanup
-echo -n "Connecting to PPP peer (HDLC/RFC1662, IPv6 only)... "
-launch_simple_pppd $CERT $KEY $HDLC_YES $NO_JUNK_COMP $IPV4_NO $IPV6_YES 2>&1
+echo -n "Connecting to PPP peer (HDLC/RFC1662, IPv6 only, 3s idle timeout)... "
+launch_simple_pppd $CERT $KEY $HDLC_YES $NO_JUNK_COMP $IPV4_NO $IPV6_YES $TIMEOUT_3S_IDLE 2>&1
wait_server "$PID"
start=$(date +%s)
-LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "hdlc" -b --pid-file=$CLIPID >/dev/null 2>&1
-kill $(cat $CLIPID) > /dev/null 2>&2
+LD_PRELOAD=libsocket_wrapper.so $OPENCONNECT -q --protocol=nullppp $ADDRESS:443 -u test $FINGERPRINT --cookie "hdlc" -Ss '' >/dev/null 2>&1
took=$(( $(date +%s) - start ))
if grep -qF "$IPV6_SUCCESS_1" $LOGFILE && grep -qF "$IPV6_SUCCESS_2" $LOGFILE; then
echo "ok (took $took seconds)"