SOL9 2.0 Class: URL

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * URL.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000

// 2009/10/16

#pragma once

#include <sol\Object.h>
//2009/10/16
#include <sol\StringT.h>
#include <sol\StringBufferT.h>

namespace SOL {

class URL :public Object {
private:
    StringT<char> protocol;
    StringT<char> host;
    StringT<char> path;
    unsigned short    port;
    StringT<char> fileName;        

public:
    URL(const char* proto1, const char* host1, const char* path1, 
            unsigned short port1 = 80)
        :protocol(proto1),
        host(host1), path(path1), port(port1) {

      }

public:
    URL(char* string)
    :port(80)
    {
        StringBufferT<char> strBuffer;
        strBuffer.append(string);

        const char* ptr = strBuffer.getBuffer();

        // get protocol
        char* p = (char*) strstr(ptr, "://");
        if (p) {     
            *p = Zero;
            protocol = ptr;
            ptr = p + 3;
    
            p = (char*)strstr(ptr, ":");
            if (p) {
                *p = Zero;
                host = ptr;
                char* por = ++p;
                char* sla = strstr(por, "/");
                if (sla) {
                    *sla = Zero;
                    path = ++sla;
                }
                port = atoi(por);
            } else {
                // no port
                port = 80;
        
                // get path
                p = (char*)strstr(ptr, "/");
                if (p) {
                    *p = Zero;
                    path = ++p;                                            
                }
                host = ptr;
            }
        }
    }

public:    
    const char* getProtocol() { return (const char*)protocol; }

public:
    const char* getHost() { return (const char*)host; }

public:
    const char* getPath() { return (const char*)path; }

public:
    unsigned short getPort() { return port; }

public:
    const char* getFileName()
    {
        const char* host = getHost();
        const char* path = getPath();

        if (*host =='/') {
            host++;
        }

        //2001/03/11
        char buffer[1024];
        //

        if (strlen(host)) {
            sprintf_s(buffer, sizeof(buffer),"%s:/%s", host, path);
    
        } else {
            sprintf_s(buffer, sizeof(buffer), "%s", path);
        }
        int len = strlen(buffer);

        // 2001/03/11 
        //Checking a url parameter.
        char* q = strstr(buffer, "?");
        if (q) {
            *q = Zero;
        }
        //

        char* ptr = buffer;
        for (int i = 0; i<len; i++) {
            if (*ptr == '|') *ptr = ':';
            if (*ptr == '/') *ptr = '\\';
            ptr++;
        }
        fileName = buffer;

        return (const char*)fileName;
    }


};

}



Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.