Annotation of libaitio/src/url.c, revision 1.1.2.1
1.1.2.1 ! misho 1: /*************************************************************************
! 2: * (C) 2010 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
! 3: * by Michael Pounov <misho@openbsd-bg.org>
! 4: *
! 5: * $Author: misho $
! 6: * $Id: aitio.c,v 1.1.1.1 2010/02/23 22:54:52 misho Exp $
! 7: *
! 8: *************************************************************************/
! 9: #include "global.h"
! 10:
! 11:
! 12: /*
! 13: * ioURLGet() Parse and get data from input URL
! 14: * @csURL = Input URL line
! 15: * @url = Output parsed URL
! 16: * return: 0 error format not find tech:// and return URL like path;
! 17: -1 error:: can`t read; >0 ok, up bits for known elements
! 18: */
! 19: int ioURLGet(const char *csURL, struct tagIOURL *url)
! 20: {
! 21: char *pos, *at, *cl, *sl;
! 22: int ret = 0;
! 23:
! 24: if (!url)
! 25: return -1;
! 26: else
! 27: memset(url, 0, sizeof(*url));
! 28:
! 29: strlcpy((char*) url->url_line, csURL, BUFSIZ);
! 30: // Tech
! 31: if (!(pos = strstr((char*) url->url_line, "://"))) {
! 32: url->url_path.vallen = strlen((char*) url->url_line);
! 33: url->url_path.value = (char*) url->url_line;
! 34: return ret;
! 35: } else {
! 36: url->url_tech.value = (char*) url->url_line;
! 37: url->url_tech.vallen = pos - (char*) url->url_line;
! 38: if (url->url_tech.vallen)
! 39: ret |= 1;
! 40:
! 41: *pos = 0;
! 42: pos += 3;
! 43: }
! 44:
! 45: // User
! 46: if ((at = strchr(pos, '@'))) {
! 47: *at++ = 0;
! 48: // Pass
! 49: if ((cl = strchr(pos, ':'))) {
! 50: *cl++ = 0;
! 51:
! 52: url->url_pass.value = cl;
! 53: url->url_pass.vallen = at - cl - 1;
! 54: if (url->url_pass.vallen)
! 55: ret |= 4;
! 56: } else
! 57: cl = at;
! 58:
! 59: url->url_user.value = pos;
! 60: url->url_user.vallen = cl - pos - 1;
! 61: if (url->url_user.vallen)
! 62: ret |= 2;
! 63:
! 64: pos = at;
! 65: }
! 66:
! 67: // Host
! 68: if ((sl = strchr(pos, '/')))
! 69: *sl++ = 0;
! 70: else
! 71: sl = pos + strlen(pos) + 1;
! 72: // Port
! 73: if ((cl = strchr(pos, ':'))) {
! 74: *cl++ = 0;
! 75:
! 76: url->url_port.value = cl;
! 77: url->url_port.vallen = sl - cl - 1;
! 78: if (url->url_port.vallen)
! 79: ret |= 16;
! 80: } else
! 81: cl = sl;
! 82:
! 83: url->url_host.value = pos;
! 84: url->url_host.vallen = cl - pos - 1;
! 85: if (url->url_host.vallen)
! 86: ret |= 8;
! 87:
! 88: pos = sl;
! 89:
! 90: // Args
! 91: if ((at = strchr(pos, '?'))) {
! 92: *at++ = 0;
! 93:
! 94: url->url_args.value = at;
! 95: url->url_args.vallen = strlen(at);
! 96: if (url->url_args.vallen)
! 97: ret |= 64;
! 98: } else
! 99: at = pos + strlen(pos) + 1;
! 100:
! 101: // Path
! 102: url->url_path.value = pos;
! 103: url->url_path.vallen = at - pos - 1;
! 104: if (url->url_path.vallen)
! 105: ret |= 32;
! 106:
! 107: pos = at + strlen(at);
! 108:
! 109: // Reserved
! 110: url->url_reserved = pos;
! 111: if (*pos)
! 112: ret |= 128;
! 113:
! 114: return ret;
! 115: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>