亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? syncmlbuilder.cpp

?? funambol windows mobile plugin source code, the source code is taken from the funambol site
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * Copyright (C) 2003-2007 Funambol, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY, TITLE, NONINFRINGEMENT or FITNESS FOR A PARTICULAR
 * PURPOSE.  See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 * 02111-1307  USA
 */

#include <string.h>

#include "base/fscapi.h"
#include "base/base64.h"
#include "base/util/utils.h"
#include "base/util/StringBuffer.h"
#include "filter/ClauseUtil.h"
#include "spds/constants.h"
#include "spds/DataTransformerFactory.h"
#include "spds/SyncItem.h"
#include "spds/SyncMLBuilder.h"

#include "event/FireEvent.h"


SyncMLBuilder::SyncMLBuilder() {
    initialize();
    set(NULL, NULL);
}

SyncMLBuilder::~SyncMLBuilder() {
    safeDelete(&target  );
    safeDelete(&device  );
}


SyncMLBuilder::SyncMLBuilder(char* t, char* d) {
    initialize();
    set(t, d);
}

void SyncMLBuilder::set(const char*t, const char*d) {

    target   = stringdup(t);
    device   = stringdup(d);
}

void SyncMLBuilder::initialize() {
    sessionID = (unsigned long)time(NULL);
    msgRef    = 0         ;
    msgID     = 0         ;
    cmdID     = 0         ;
}

void SyncMLBuilder::resetCommandID() {
    cmdID = 0;
}

void SyncMLBuilder::increaseMsgRef() {
    msgRef++;
}

void SyncMLBuilder::resetMsgRef() {
    msgRef = 0;
}

void SyncMLBuilder::addItemStatus(ArrayList* previousStatus, Status* status) {

    if (previousStatus->size() == 0) {
        previousStatus->add(*status);
        return;
    }

    BOOL found    = FALSE;
    Status* s     = NULL;

    if (status == NULL)
        return;
    ArrayList* list = new ArrayList();
    for (int i = 0; i < previousStatus->size(); i++) {

        s = (Status*)previousStatus->get(i);
        if ((strcmp(s->getCmd(), status->getCmd()) == 0) &&
            (strcmp(s->getData()->getData(), status->getData()->getData()) == 0) &&
            (strcmp(s->getCmdRef(), status->getCmdRef()) == 0) ) {
                    list = s->getItems();
                    for (int j = 0; j < status->getItems()->size(); j++) {
                        list->add(*((Item*)(status->getItems())->get(j)));
                        found = TRUE;
                    }
                }

    }
    if (!found)
        previousStatus->add(*status);

}



/*
* Return the status of the items sent by server. Used to create the status to respond
* after a add, replace or delete command
*/
Status* SyncMLBuilder::prepareItemStatus(const char* COMMAND,
                                         const char* key,
                                         const char* cmdRef,
                                         int code) {
    /*
    <Status>                                 CmdID*        cmdID     ,
        <CmdID>3</CmdID>                     char*      msgRef    ,
        <MsgRef>2</MsgRef>                   char*      cmdRef    ,
        <CmdRef>4</CmdRef>                   char*      cmd       ,
        <Cmd>Replace</Cmd>                   ArrayList*    targetRefs,
        <Data>201</Data>                     ArrayList*    sourceRefs,
        <Item>                               Cred*         cred      ,
            <Source>                         Chal*         chal      ,
            <LocURI>item0</LocURI>           Data*         data      ,
            </Source>                        ArrayList*    items     );
        </Item>
        <Item>
            <Source>
            <LocURI>item1</LocURI>
            </Source>
        </Item>
    </Status>
    */

    ++cmdID;
    char* cmdid = itow(cmdID);
    CmdID* commandID  = new CmdID(cmdid);
    ArrayList* empty  = new ArrayList();
    Data*      data   = new Data(code);
    ArrayList* list   = new ArrayList();
    Source* sou       = new Source(key);
    Item* item        = new Item(NULL, sou, NULL, NULL, FALSE);
    list->add(*item);

    char *mRef = itow(msgRef);
    Status* s = new Status(commandID, mRef, cmdRef, COMMAND, empty, empty, NULL, NULL, data, list);
    delete [] mRef;

    safeDelete(&cmdid);
    deleteCmdID(&commandID);
    deleteData(&data);
    deleteSource(&sou);
    deleteItem(&item);
    deleteArrayList(&empty);
    deleteArrayList(&list);
    if (list)  { delete list; list = NULL; }
    if (empty) { delete empty; empty = NULL; }

    return s;

}

/*
* Return the status of the server authentication process
*/
Status* SyncMLBuilder::prepareSyncHdrStatus(Chal*chal, int d) {

    ++cmdID;
    char* cmdid = itow(cmdID);
    CmdID* commandID         = new CmdID(cmdid);
    ArrayList*    targetRefs = new ArrayList();
    ArrayList*    sourceRefs = new ArrayList();
    TargetRef*    tar        = new TargetRef(target);
    SourceRef*    sou        = new SourceRef(device);
    Data*      data          = new Data(d);
    targetRefs->add(*tar);
    sourceRefs->add(*sou);

    Status* s = new Status(commandID, itow(msgRef), "0", SYNC_HDR, targetRefs, sourceRefs, NULL, chal, data, NULL);

    // Fire Sync Status Event: syncHdr status from client
    fireSyncStatusEvent(SYNC_HDR, s->getStatusCode(), NULL, NULL, NULL , CLIENT_STATUS);

    safeDelete(&cmdid);
    deleteCmdID(&commandID);
    deleteArrayList(&targetRefs);
    deleteArrayList(&sourceRefs);
    deleteTargetRef(&tar);
    deleteSourceRef(&sou);
    deleteData(&data);

    return s;

}

Status* SyncMLBuilder::prepareSyncStatus(SyncSource& source, Sync* sync) {
    if (sync == NULL)
        return NULL;

    ++cmdID;

    char* cmdid = itow(cmdID);
    CmdID* commandID         = new CmdID(cmdid);
    delete [] cmdid;   cmdid = NULL;
    ArrayList*    targetRefs = new ArrayList();
    ArrayList*    sourceRefs = new ArrayList();
    CmdID* cmdRef            = sync->getCmdID();


    TargetRef*    tar        = new TargetRef(source.getConfig().getURI());
    SourceRef*    sou        = new SourceRef(_wcc(source.getName()));
    targetRefs->add(*tar);
    sourceRefs->add(*sou);
    Data* d                  = new Data(200);

    Status* s = new Status(commandID, itow(msgRef), cmdRef->getCmdID(), SYNC, targetRefs, sourceRefs, NULL, NULL, d, NULL);

    // Fire Sync Status Event: sync status from client
    fireSyncStatusEvent(SYNC, s->getStatusCode(), source.getConfig().getName(), source.getConfig().getURI(), NULL, CLIENT_STATUS);

    deleteCmdID(&commandID);
    deleteArrayList(&targetRefs);
    deleteArrayList(&sourceRefs);
    deleteTargetRef(&tar);
    deleteSourceRef(&sou);
    deleteData(&d);

    return s;

}


/*
* Return the status against an alert command. It could be releated on the authentication process
* or any other else
*/
Status* SyncMLBuilder::prepareAlertStatus(SyncSource& source, ArrayList* alerts, int authStatusCode) {
    /*
    next = source.getNextAnchor();
    <Status>\n
        <CmdID>2</CmdID>\n
        <MsgRef>1</MsgRef>
        <CmdRef>1</CmdRef>
        <Cmd>Alert</Cmd>\n
        <TargetRef>
            sb.append(source.getRemoteURI());
        </TargetRef>\n
        <SourceRef>
            sb.append(source.getName(NULL, -1));
        </SourceRef>\n
        <Data>200</Data>\n
        <Item>\n
            <Data>
                <Anchor xmlns='syncml:metinf'>
                    <Next>
                        sb.append(next);
                    </Next>
                </Anchor>\n
            </Data>\n
        </Item>\n
    </Status>
    */

    if (alerts == NULL || alerts->size() == 0)
        return NULL;

    Alert* a = NULL;
    Item* item = NULL;
    ArrayList* list = new ArrayList();
    BOOL found = FALSE;

    for (int i = 0; i < alerts->size(); i++) {
        a = (Alert*)alerts->get(i);
        list = a->getItems();
        if (list->size() == 1) {
            Item* it = (Item*)list->get(0);
            if (strcmp(it->getTarget()->getLocURI(), _wcc(source.getName())) == 0) {
                found = TRUE;
            }
        }
    }

    //
    // Currently it returns null. It could return a status value if necessary
    //
    if (!found) {
        return NULL;

    }

    ++cmdID;

    char* cmdid = itow(cmdID);
    CmdID* commandID         = new CmdID(cmdid);
    delete [] cmdid;   cmdid = NULL;
    ArrayList*    targetRefs = new ArrayList();
    ArrayList*    sourceRefs = new ArrayList();

    TargetRef*    tar        = new TargetRef(source.getConfig().getURI());
    SourceRef*    sou        = new SourceRef(_wcc(source.getName()));
    targetRefs->add(*tar);
    sourceRefs->add(*sou);
    CmdID* cmdRef            = a->getCmdID();
    char* next            = NULL;
    int authStatus           = 0;

    if (authStatusCode >= 200 && authStatusCode <=299)
        authStatus = 200;
     else
        authStatus = authStatusCode;

    Data* d              = new Data(authStatus);
    ComplexData* data    = NULL;
    ArrayList* items     = new ArrayList();
    Anchor*    anchor    = NULL;

    if (authStatusCode < 400) {
        list = a->getItems();
        if (list->size() > 0) {
            for (int i = 0; i < list->size(); i++) {
                Item* it = (Item*)list->get(i);
                Meta* m = it->getMeta();
                if (m) {
                    anchor = m->getAnchor();
                    next = stringdup(anchor->getNext());
                }

            }

            anchor = new Anchor(NULL, next);
            data = new ComplexData();
            data->setAnchor(anchor);
            item           = new Item(NULL, NULL, NULL, data, FALSE);
            items->add(*item);
        }
    }

    Status* s = new Status(commandID, itow(msgRef), cmdRef->getCmdID(), ALERT, targetRefs, sourceRefs, NULL, NULL, d, items);

    // Fire Sync Status Event: alert status from client
    fireSyncStatusEvent(ALERT, s->getStatusCode(), source.getConfig().getName(), source.getConfig().getURI(), NULL , CLIENT_STATUS);

    deleteCmdID(&commandID);
    deleteArrayList(&targetRefs);
    deleteArrayList(&sourceRefs);
    deleteTargetRef(&tar);
    deleteSourceRef(&sou);
    deleteItem(&item);
    deleteAnchor(&anchor);
    deleteComplexData(&data);
    deleteData(&d);
    safeDel(&next);

    return s;
}

/*
* Return the status against an arbitrary command.
*/
Status* SyncMLBuilder::prepareCmdStatus(AbstractCommand &cmd, int status) {
    /*
    <Status>\n
        <CmdID>2</CmdID>\n
        <MsgRef>1</MsgRef>
        <CmdRef>1</CmdRef>
        <Cmd>cmd</Cmd>\n
        <Data>status</Data>\n
    </Status>
    */

    ++cmdID;

    char* cmdid = itow(cmdID);
    CmdID commandID(cmdid);
    delete [] cmdid; cmdid = NULL;
    Data d(status);
    char *msgRefStr = itow(msgRef);
    ArrayList empty;

    Status* s = new Status(&commandID, msgRefStr, cmd.getCmdID()->getCmdID(), cmd.getName(), &empty, &empty, NULL, NULL, &d, NULL);

    // Fire Sync Status Event: status from client
    fireSyncStatusEvent(s->getCmd(), s->getStatusCode(), NULL, NULL, NULL , CLIENT_STATUS);

    delete [] msgRefStr;
    return s;
}

AbstractCommand *SyncMLBuilder::prepareDevInf(AbstractCommand *cmd, DevInf &devInf)
{
    AbstractCommand *res = NULL;
    char *msgRefStr = NULL;

    Source source(DEVINF_URI);
    Meta meta;
    meta.setType(DEVINF_FORMAT);
    // meta.setFormat("xml");
    ComplexData complexData;
    complexData.setDevInf(&devInf);
    Item item(NULL,
              &source,
              NULL,
              &complexData,
              FALSE);


    ++cmdID;
    char* cmdid = itow(cmdID);
    CmdID commandID(cmdid);
    delete [] cmdid; cmdid = NULL;
    ArrayList items;
    items.add(item);

    if (cmd) {
        /*
          <Result>
          <CmdID>2</CmdID>
          <MsgRef>1</MsgRef>
          <CmdRef>4</CmdRef>
          <Meta><Type xmlns='syncml:metinf'>application/vnd.syncml-devinf+xml</Type></Meta>
          <Item>
            <SourceRef><LocURI>./devinf11</LocURI></SourceRef>
            <Data>
              <DevInf>...</DevInf>
            </Data>
          </Item>
          </Result>
        */

        msgRefStr = itow(msgRef);
        ArrayList empty;
        res = new Results(&commandID,
                          msgRefStr,
                          cmd->getCmdID()->getCmdID(),
                          &meta,
                          &empty,
                          &empty,
                          &items);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品一区二区三区四区 | 久久婷婷成人综合色| 91麻豆国产在线观看| 韩国女主播一区| 美女一区二区在线观看| 亚洲午夜电影在线观看| 中文字幕欧美一区| 中文字幕免费一区| 中文字幕精品一区二区三区精品| 欧美大片日本大片免费观看| 欧美日韩精品电影| 色一情一伦一子一伦一区| 国产69精品一区二区亚洲孕妇 | 午夜精品久久久久久久久久 | 91在线视频网址| 色综合一区二区| 91福利国产精品| 精品视频123区在线观看| 欧美日韩一区二区三区不卡| 欧美日韩一区二区三区高清 | 日韩无一区二区| 久久久久国产精品麻豆ai换脸 | 亚洲午夜久久久| 天天操天天干天天综合网| 免费欧美在线视频| 日韩欧美一级二级三级久久久| 日韩欧美国产一二三区| 久久精品在这里| 亚洲视频精选在线| 亚洲国产aⅴ成人精品无吗| 蜜臀精品久久久久久蜜臀| 国产一区二区在线电影| 成人av免费观看| 欧美电影一区二区| 久久青草欧美一区二区三区| 亚洲欧美日韩国产中文在线| 午夜在线电影亚洲一区| 国产高清亚洲一区| 欧美日韩中文字幕一区二区| 久久久久久久久久久久久久久99| 亚洲视频免费在线| 精品一区二区三区日韩| 欧亚洲嫩模精品一区三区| 久久久www成人免费无遮挡大片 | 欧美肥妇free| 亚洲女爱视频在线| 国产成人综合在线| 91精品国产日韩91久久久久久| 自拍偷拍欧美激情| 国产**成人网毛片九色 | 精品粉嫩aⅴ一区二区三区四区| 有坂深雪av一区二区精品| 国产精品99久久久久久久女警 | 国产大陆精品国产| 日韩精品自拍偷拍| 色域天天综合网| 中文字幕日韩一区二区| 国产成人av一区二区三区在线观看| 欧美日韩激情一区二区三区| 亚洲人成网站精品片在线观看| 国产成a人亚洲精| 久久久av毛片精品| 国产精品资源网| 日韩欧美国产1| 精油按摩中文字幕久久| 精品国产一区a| 国产一区二区不卡在线| 精品88久久久久88久久久| 国产麻豆91精品| 国产亚洲人成网站| 国产成a人亚洲| 亚洲另类春色校园小说| 91福利在线播放| 蜜桃在线一区二区三区| 精品日韩一区二区三区免费视频| 奇米在线7777在线精品| 久久日韩粉嫩一区二区三区| 国产乱码精品1区2区3区| 中文字幕在线观看不卡视频| 在线观看欧美日本| 精品一区二区三区视频在线观看| 国产欧美日韩卡一| 欧美日韩视频专区在线播放| 久久精品国产一区二区三| 久久精品亚洲一区二区三区浴池| 97精品久久久午夜一区二区三区| 午夜精品久久久久影视| 国产午夜久久久久| 欧美区视频在线观看| 99久久久久久99| 美国欧美日韩国产在线播放| 国产欧美日本一区视频| 亚洲精品成人天堂一二三| 日韩欧美国产一区二区在线播放 | 免费成人你懂的| 国产精品久久久久久久久动漫 | 久久久久国产成人精品亚洲午夜 | 久久精品一二三| 欧美一区二区播放| 91久久精品一区二区三区| 国产成人综合在线播放| 日本美女一区二区三区| 亚洲欧美激情一区二区| 国产欧美一区二区三区在线看蜜臀 | 国产成人精品影视| 久久精品国产精品青草| 午夜精品久久久久久| 夜夜精品视频一区二区| 国产精品麻豆99久久久久久| 久久精品在线免费观看| 精品国产三级a在线观看| 91精品国产欧美日韩| 7777精品久久久大香线蕉| 91久久免费观看| 欧美私人免费视频| 精品婷婷伊人一区三区三| 欧美日韩亚洲综合一区| 在线观看91精品国产入口| 99视频精品免费视频| 色av成人天堂桃色av| 欧美日韩国产一区二区三区地区| 91极品美女在线| 欧美日韩中文字幕精品| 91精品国产综合久久福利软件| 日韩女优av电影| 中文字幕不卡一区| 一区二区三区日韩| 图片区小说区国产精品视频| 日韩精品亚洲专区| 国精产品一区一区三区mba视频| 美女视频一区二区三区| 国产麻豆成人传媒免费观看| 99re热这里只有精品视频| 国产精品视频yy9299一区| 玉米视频成人免费看| 蜜桃视频一区二区三区在线观看| 国产一区二区三区在线观看免费视频 | 久久久99精品免费观看| 欧美国产精品一区二区| 丝瓜av网站精品一区二区| 久久国产精品色婷婷| 粉嫩aⅴ一区二区三区四区| 在线免费观看日本欧美| 久久久精品综合| 日本在线播放一区二区三区| 成人黄色电影在线| 91麻豆精品国产91| 综合欧美亚洲日本| 蜜桃久久久久久久| 欧美在线视频不卡| 国产精品欧美经典| 精品一二三四在线| 337p亚洲精品色噜噜狠狠| 中文字幕一区二区在线播放| 麻豆一区二区三区| 欧美色视频在线| 亚洲综合自拍偷拍| 91捆绑美女网站| 国产精品免费网站在线观看| 免费看黄色91| 日韩一区二区在线观看视频播放| 亚洲免费观看高清在线观看| 粉嫩在线一区二区三区视频| 久久男人中文字幕资源站| 国产精品资源在线| 欧美激情中文不卡| 成人精品免费看| 中文字幕欧美国产| www.av精品| 亚洲天堂福利av| 91亚洲精品久久久蜜桃| 最新国产の精品合集bt伙计| 99久久免费视频.com| 亚洲免费资源在线播放| 日本韩国一区二区三区视频| 亚洲激情av在线| 欧美日韩高清一区| 天天色天天操综合| 欧美一区二区三区白人| 夜夜亚洲天天久久| 91精品蜜臀在线一区尤物| 麻豆视频观看网址久久| 久久久99久久| a美女胸又www黄视频久久| 日本一区二区视频在线观看| 91影院在线免费观看| 亚洲色图丝袜美腿| 欧美日韩免费视频| 免费在线观看不卡| 国产午夜精品一区二区三区视频| 国产成a人无v码亚洲福利| 亚洲精品成人悠悠色影视| 欧美一区国产二区| 蜜桃一区二区三区在线观看| 国产精品传媒入口麻豆| 欧美日韩美少妇| av中文字幕不卡| 午夜精品福利久久久| 久久久亚洲午夜电影| 欧美日韩aaaaa|