/*
* This file is part of buteo-syncml package
*
* Copyright (C) 2010 Nokia Corporation. All rights reserved.
*
* Contact: Sateesh Kavuri <sateesh.kavuri@nokia.com>
*
* Redistribution and use in source and binary forms, with or without 
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, 
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, 
* this list of conditions and the following disclaimer in the documentation 
* and/or other materials provided with the distribution.
* Neither the name of Nokia Corporation nor the names of its contributors may 
* be used to endorse or promote products derived from this software without 
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
* 
*/
#include "SocketPair.h"

#include <QTcpSocket>
#include <QTcpServer>

using namespace DataSync;

SocketPair::SocketPair(QObject *aParent)
 :  QObject(aParent),
    iServer(new QTcpServer(this)),
    iClientSocket(0),
    iServerSocket(0)
{
}

SocketPair::~SocketPair()
{
    delete iClientSocket;
    iClientSocket = 0;

    delete iServerSocket;
    iServer = 0;

    delete iServer;
    iServer = 0;
}

bool SocketPair::init()
{
    if (iServer == 0)
        return false;

    if (!iServer->listen())
        return false;

    iClientSocket = new QTcpSocket(this);
    iClientSocket->connectToHost("127.0.0.1", iServer->serverPort());
    if (!iClientSocket->waitForConnected(1000))
    {
        delete iClientSocket;
        iClientSocket = 0;
        return false;
    }

    if (!iServer->waitForNewConnection())
    {
        delete iClientSocket;
        iClientSocket = 0;
        return false;
    }

    iServerSocket = iServer->nextPendingConnection();

    return true;
}

QTcpSocket *SocketPair::clientSocket()
{
    return iClientSocket;
}

QTcpSocket *SocketPair::serverSocket()
{
    return iServerSocket;
}
