bluetoothengine/headsetsimulator/core/inc/Server/hsserver.h
author michal.sulewski
Wed, 15 Sep 2010 15:59:44 +0200
branchheadsetsimulator
changeset 60 90dbfc0435e3
permissions -rw-r--r--
source code commit

/*
 * Component Name: Headset Simulator
 * Author: Comarch S.A.
 * Version: 1.0
 * Copyright (c) 2010 Comarch S.A.
 *  
 * This Software is submitted by Comarch S.A. to Symbian Foundation Limited on 
 * the basis of the Member Contribution Agreement entered between Comarch S.A. 
 * and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be 
 * used only in accordance with the terms and conditions of the Agreement. 
 * Any other usage, duplication or redistribution of this Software is not 
 * allowed without written permission of Comarch S.A.
 * 
 */

#ifndef HSSERVER_H
#define HSSERVER_H

#include <bt_sock.h>
#include <bttypes.h>

class CBluetoothSocket;
class RSocketServ;
class MHsAcceptNewClientObserver;

/** The number of connections allowed in the queue */
const TUint KListenQueueSize = 10;

/** Buffer size */
const TInt KMaxTHSConnectionBufferSize = 1024;

/**
 * @brief Server that listens and handles physical link connection with AG device.
 */
class CHsServer : public CBase, public MBluetoothSocketNotifier
{
public:

    /**
     * Two-phased constructor.
     * @param aSocketServ session of socket server
     * @return instance of class
     */
    static CHsServer* NewL( RSocketServ &aSocketServ );

    /**
     * Two-phased constructor.
     * @param aSocketServ session of socket server
     * @return instance of class
     */
    static CHsServer* NewLC( RSocketServ &aSocketServ );

    /**
     * Destructor
     */
    ~CHsServer();

public:

    /**
     * Turns on server. Method listens (RFCOMM protocol) and accepts ongoing 
     * connections. Server gets the first free port number in system.
     * 
     * @return KErrNone if successful, 
     * KErrAlreadyExists if server is already running,
     * otherwise one of the system-wide error codes                                      
     */
    TInt Listen();

    /**
     * Returns server listening status.
     * 
     * @return ETrue if server listens, otherwise EFalse
     */
    TBool IsReady();

    /**
     * Shutdowns server. Cancels receiving and sending data, disconnects 
     * clients and destroys all bluetooth sockets.
     */
    void Shutdown();

    /**
     * Sets new client observer.
     * 
     * @param aNewClientObserv reference to observer
     */
    void SetNewClientObserver( MHsAcceptNewClientObserver &aNewClientObserv );

    /**
     * Returns listening server port.
     * 
     * @return port number
     */
    TInt GetPort();

    /**
     * Connects to AG client's socket.
     * 
     * @param aAddr socket address
     * 
     * @leave KErrInUse if the device is already being used
     */
    void GetSocketAndTryToConnectL( const TBTSockAddr &aAddr );

protected:

private:
    /**
     * Constructor for performing 1st stage construction
     * 
     * @param aSocketServ session of socket server
     */
    CHsServer( RSocketServ &aSocketServ );

    /**
     * Constructor for performing 2nd stage construction
     */
    void ConstructL();

private:
    //Methods inhertited from MBluetoothSocketNotifier
    void HandleConnectCompleteL( TInt aErr );

    void HandleAcceptCompleteL( TInt aErr );

    void HandleShutdownCompleteL( TInt aErr );

    void HandleSendCompleteL( TInt aErr );

    void HandleReceiveCompleteL( TInt aErr );

    void HandleIoctlCompleteL( TInt aErr );

    void HandleActivateBasebandEventNotifierCompleteL( TInt aErr,
            TBTBasebandEventNotification& aEventNotification );
private:

    /** Listening status */
    TBool iListen;

    /** Server port */
    TInt iPort;

    /** Service security */
    TBTServiceSecurity iServerSecurity;

    /** Session of socket server */
    RSocketServ &iSServ;

    /** Socket for listening for new connections */
    CBluetoothSocket *iSocketServer;

    /** Client socket */
    CBluetoothSocket *iBlankSocket;

    /** Second client socket */
    CBluetoothSocket *iBlankSocket2;

    /** Pointer to observer */
    MHsAcceptNewClientObserver *iNewClientObserver;
};

#endif // HSSERVER_H