From 74406e6eee2f69e8861315071b5be38571747c11 Mon Sep 17 00:00:00 2001 From: epochqwert Date: Tue, 13 Jan 2015 02:09:00 -0600 Subject: updated a lot of cuturl. added a timeout to telnet-gateway.sh --- nocompile/libexec/telnet-gateway.sh | 6 +- src/bin/cuturl.c | 273 +++++++++++++++++++++++++----------- 2 files changed, 197 insertions(+), 82 deletions(-) diff --git a/nocompile/libexec/telnet-gateway.sh b/nocompile/libexec/telnet-gateway.sh index ca2b90d..aac9dd6 100755 --- a/nocompile/libexec/telnet-gateway.sh +++ b/nocompile/libexec/telnet-gateway.sh @@ -14,4 +14,8 @@ for i in `seq 5 1`;do printf "\r%d..." $i sleep 1 done -nc $(printf "%s" "$serverURL" | cuturl | grep ^domain | cut '-d ' -f2) 23 +port=$(printf "%s" "$serverURL" | cuturl | grep ^port | cut '-d ' -f2) +exec ncat -i 600 $(printf "%s" "$serverURL" \ + | cuturl \ + | grep ^domain \ + | cut '-d ' -f2 ) $port diff --git a/src/bin/cuturl.c b/src/bin/cuturl.c index 945d640..4a2f3f5 100644 --- a/src/bin/cuturl.c +++ b/src/bin/cuturl.c @@ -1,5 +1,7 @@ + #include #include +#include /* schemes are case sensitive but cononicals are lower case. domain is case insensitive. return it lowercased. @@ -19,7 +21,7 @@ #define DEFAULT_PORT "80" #define DEFAULT_QUERY_STRING "" #define DEFAULT_FRAGMENT_ID "" -*/ + #define DEFAULT_SCHEME "DEFAULT" #define DEFAULT_USERNAME "DEFAULT" #define DEFAULT_PASSWORD "DEFAULT" @@ -27,9 +29,32 @@ #define DEFAULT_PATH "DEFAULT" #define DEFAULT_QUERY_STRING "DEFAULT" #define DEFAULT_FRAGMENT_ID "DEFAULT" +*/ + +#define AorB(a,b) ((a)?(a):(b)) + +#define DEFAULT_SCHEME AorB(getenv("CUTURL_SCHEME"),"DEFAULT") +#define DEFAULT_USERNAME AorB(getenv("CUTURL_USERNAME"),"DEFAULT") +#define DEFAULT_PASSWORD AorB(getenv("CUTURL_PASSWORD"),"DEFAULT") +#define DEFAULT_PORT AorB(getenv("CUTURL_PORT"),"DEFAULT") +#define DEFAULT_PATH AorB(getenv("CUTURL_PATH"),"DEFAULT") +#define DEFAULT_QUERY_STRING AorB(getenv("CUTURL_QUERY_STRING"),"DEFAULT") +#define DEFAULT_FRAGMENT_ID AorB(getenv("CUTURL_FRAGMENT_ID"),"DEFAULT") -int main() { - char line[1024]; +#define F_SCHEME 1<<0 +#define F_USERNAME 1<<1 +#define F_PASSWORD 1<<2 +#define F_DOMAIN 1<<3 +#define F_PORT 1<<4 +#define F_PATH 1<<5 +#define F_QUERY_STRING 1<<6 +#define F_FRAGMENT_ID 1<<7 + +char *long_opts[]={"scheme","username","password","domain","port","path","query_string","fragment_id",0}; +char *short_opts[]={"s","u","k","d","P","p","q","f"}; + +int main(int argc,char *argv[]) { + char *line; char *scheme=0; char *username=0; char *password=0; @@ -38,104 +63,190 @@ int main() { char *path=0; char *query_string=0; char *fragment_id=0; + //exactly 8 parts! let's store that in a byte. + unsigned char flags=0; int i; - fgets(line,sizeof(line),stdin); - for(i=0;line[i] && line[i] != '\n' && line[i] != '\r';i++); - line[i]=0; - - //split at first single / into line and path - for(i=0;line[i];i++) { - if(line[i] == '/' && line[i+1] == '/') { - i++; - continue; - } - if(line[i] == '/') { - line[i]=0; - path=line+i+1; - break; + int size=1024; + char using_stdin=1; + char malloced=0; + if(argc > 0) { + if(!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h")) { + printf("usage: echo urls | cuturl [options]\n"); + printf("usage: cuturl [options] url [options] [url]\n\n"); + printf("options: \n"); + for(i=0;long_opts[i];i++) { + printf(" -%s|--%s\n",short_opts[i],long_opts[i]); + } + printf("To set default values use environment variables like: CUTURL_[OPTION]\n"); + return 2; } } + while(1) { + // + // todo: add argument parsing + // + if(!using_stdin) flags=0; + if(argc > 0) { + for(argc--,argv++;argc>0;argc--,argv++) { + for(i=0;long_opts[i];i++) { + if(!strncmp(*argv,"--",2)) { + if(!strcmp(*argv+2,long_opts[i])) { + flags|=(1<