Linux2008/11/26 09:38
/**
 * euckrToUtf8()
 *
 * @author     Ji-hoon Kang(luvflo@gmail.com)
 * @date    2008-11-26
 *
 * @description
 *     iconv를 사용하여 EUC-KR 문자열을 UTF-8으로 변환합니다.
 *
 */
string XpgUtil::euckrToUtf8(const char* szBuff)
{
    string retv;

    char* outbuf = NULL;
    char* out = NULL;

    size_t ileft = strlen(szBuff);
    size_t oleft = ileft * 2; //TODO: 임시로.. 확인 후 수정요망..

    out = outbuf = (char*)calloc(1, oleft + 1);

    iconv_t cd = iconv_open("UTF-8", "EUC-KR");
    if(cd < 0) {
        perror(":");
        if(out){
            free(out);
            out=outbuf=NULL;
        }
        return retv;
    }

    int err = iconv(cd, (char**)&szBuff, &ileft, &outbuf, &oleft);
    iconv_close(cd);
    *outbuf = 0;

    if(err >= 0) retv.assign(out);
    if(out){
        free(out);
        out=outbuf=NULL;
    }

    return retv;
}

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 강지훈
Linux/cURL2008/11/11 10:27
/*
 * curl_redirection example
 *
 * @date    2008. 11. 10
 * @author    ji-hoon Kang(luvflo@gmail.com)
 */

#include <stdio.h>
#include <memory.h>
#include <curl/curl.h>

typedef struct _ftpFile
{
    char    filename[FILENAME_MAX];
    FILE*     stream;
}FtpFile;


static size_t header_callback(void* ptr, size_t size, size_t nmemb, void* stream)
{
    char* buff = (char*)ptr;
    const char* content_disposition = "Content-Disposition: attachment;filename=";

    if(strstr(buff, content_disposition) )
    {
        FtpFile* pFileInfo = (FtpFile*)stream;
        memset(pFileInfo->filename, 0, sizeof(pFileInfo->filename));
        memcpy(pFileInfo->filename, buff+strlen(content_disposition), strlen(buff) - strlen(content_disposition) - 2);

        printf("catched filename : %s length : %d\n", pFileInfo->filename, strlen(pFileInfo->filename));
    }
    return size * nmemb;
}


static size_t write_callback(void* buffer, size_t size, size_t nmemb, void* stream)
{
    FtpFile* out = (FtpFile*)stream;
    if(out && !out->stream && out->filename)
    {
        out->stream = fopen(out->filename, "wb");
        if(!out->stream)
            return -1;
    }
    return fwrite(buffer, size, nmemb, out->stream);
}


/**
 * @param     hCurl - curl handle
 * @param    sURL -
 * @param    sLocalDir -
 * @return     'CURLE_OK' ok, otherwise failure.
 */
static CURLcode download(CURL* hCurl, const char* sURL, const char* sLocalDir)
{
    FtpFile     localfile;
    memset(&localfile, 0, sizeof(FtpFile));

    curl_easy_setopt(hCurl, CURLOPT_HEADERFUNCTION, header_callback);
    curl_easy_setopt(hCurl, CURLOPT_HEADERDATA, &localfile);
    curl_easy_setopt(hCurl, CURLOPT_URL, sURL);
    curl_easy_setopt(hCurl, CURLOPT_WRITEFUNCTION, write_callback);
    curl_easy_setopt(hCurl, CURLOPT_WRITEDATA, &localfile);
    curl_easy_setopt(hCurl, CURLOPT_VERBOSE, 1);

    CURLcode res =  curl_easy_perform(hCurl);
    if(localfile.stream) fclose(localfile.stream);
    return res;
}


int main(int argc, char** argv)
{
    const char* sURL = "http://fmov.pann.com/mmediaDownload.jsp?FileID=12992569";
    const char* sLocalDir = "/home/david/Download";

    CURL*         hCurl = NULL;

    curl_global_init(CURL_GLOBAL_ALL);
    hCurl = curl_easy_init();

    download(hCurl, sURL, sLocalDir);

    curl_easy_cleanup(hCurl);
    curl_global_cleanup();

    return 0;
}



curl의 get_easy_info()에서 redirect url을 얻어오는 방법이 아닌, jsp page header에서 실제 다운로드 받는 파일 이름을 가져오는 예제이다.
다운로드 받는 시점에, 리다이렉션되는 파일의 실제 파일이름을 얻어오고자 할때 사용했던 방법이다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 강지훈
Linux2008/11/10 09:43
#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <memory.h>
#include <netinet/ether.h>
#include <net/if.h>

/**
 * @param szMAC[out] - mac address value.
 * @param nLen[out] - size of mac address
 * @return 0 ok, otherwise failure.
 *
 * @author Ji-hoon Kang(luvflo@gmail.com)
 * @date    2008-11-07
 */
int GetMacAddr(char* szMac, int* nLen)
{
    const char*  default_eth = "eth0";
    char*   mac_addr = NULL;
    struct ifreq  ifrq;
    int    fd = socket(AF_INET, SOCK_DGRAM, 0);

    memset(&ifrq, 0, sizeof(ifrq));
    strcpy(ifrq.ifr_name , default_eth);

    if(ioctl(fd, SIOCGIFHWADDR, &ifrq)<0)
    {
        close(fd);
        fprintf(stderr, "%s:%d> ERROR getMacAddr", __FILE__, __LINE__);
        return 1;
    }
 
    struct sockaddr *sa = &(ifrq.ifr_hwaddr);
    mac_addr = (char*)ether_ntoa((struct ether_addr*)sa->sa_data );
    if(mac_addr == NULL) return 1;

    memset(szMac, 0, sizeof(szMac));
    sprintf(szMac, "%s", mac_addr);
    *nLen = strlen(szMac);

    close(fd);
    return 0;
}

int main(int argc, char** argv)
{
    char  sMacAddr[64] = {0,};
    int  nLength = 0;
    if( GetMacAddr(sMacAddr, &nLength) )
    {
        return 1;
    }
    printf("MacAddr : %s\nString length : %d\n", sMacAddr, nLength);
    return 0;
}
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 강지훈
Linux2008/11/03 13:01


1. /etc/init.d/mountdevsubfs.sh 수정.

# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb


Magic 아래쪽부터 mount 부분까지 주석 처리 되어있는 걸 없에자

수정 후

# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb




2. /etc/udev/rules.d/40-permissions.rules 에 유저그룹 vboxusers 를 추가 해 줘야 함

# USB serial converters
SUBSYSTEM=="usb_device", GOTO="usb_serial_start"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GOTO="usb_serial_start"
GOTO="usb_serial_end"
LABEL="usb_serial_start"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001" \
, MODE="0660", GROUP="dialout"
LABEL="usb_serial_end"


이 부분을

# USB serial converters
SUBSYSTEM=="usb_device", GOTO="usb_serial_start"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GOTO="usb_serial_start"
GOTO="usb_serial_end"
LABEL="usb_serial_start"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001" \
,GROUP="vboxusers", MODE="0660", GROUP="dialout"
LABEL="usb_serial_end"

로 그룹 부분 설정 추가




3. usbfs 설정 하나 더 추가 (/etc/fstab)

젤 아래줄에

#usbfs
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 강지훈