summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/yahoo/libkyahoo/coreprotocol.h
blob: 6432093c13766acc82077448863e59c90ef41faa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
    Kopete Yahoo Protocol

    Copyright (c) 2004 Duncan Mac-Vicar P. <duncan@kde.org>

    Based on code
    Copyright (c) 2004 SuSE Linux AG <http://www.suse.com>
    Copyright (C) 2003  Justin Karneges <justin@affinix.com>

    Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>

    *************************************************************************
    *                                                                       *
    * This library is free software; you can redistribute it and/or         *
    * modify it under the terms of the GNU Lesser General Public            *
    * License as published by the Free Software Foundation; either          *
    * version 2 of the License, or (at your option) any later version.      *
    *                                                                       *
    *************************************************************************
*/

#ifndef YAHOO_CORE_PROTOCOL_H
#define YAHOO_CORE_PROTOCOL_H

#include <qobject.h>

class Transfer;
class YMSGProtocol;

class CoreProtocol : public QObject
{
Q_OBJECT
public:
	enum State { NeedMore, Available, NoData, OutOfSync };

	CoreProtocol();

	virtual ~CoreProtocol();

	/**
	 * Reset the protocol, clear buffers
	 */
	void reset();

	/**
	 * Accept data from the network, and buffer it into a useful message
	 * This requires parsing out each FLAP, etc. from the incoming data
	 * @param incomingBytes Raw data in wire format.
	 */
	void addIncomingData( const QByteArray& incomingBytes );

	/**
	 * @return the incoming transfer or 0 if none is available.
	 */
	Transfer* incomingTransfer();

	/**
	 * Convert a request into an outgoing transfer
	 * emits @ref outgoingData() with each part of the transfer
	 */
	void outgoingTransfer( Transfer* outgoing );

	/**
	 * Get the state of the protocol
	 */
	int state();

signals:
	/**
	 * Emitted as the core protocol converts fields to wire ready data
	 */
	void outgoingData( const QByteArray& );

	/**
	 * Emitted when there is incoming data, parsed into a Transfer
	 */
	void incomingData();
protected slots:
	/**
	 * Just a debug method to test emitting to the socket, atm - should go to the ClientStream
	 */
	void slotOutgoingData( const QByteArray & );

protected:
	/**
	 * Check that there is data to read, and set the protocol's state if there isn't any.
	 */
	bool okToProceed( QDataStream & );
	/**
	 * Convert incoming wire data into a Transfer object and queue it
	 * @return number of bytes from the input that were parsed into a Transfer
	 */
	int wireToTransfer( const QByteArray& wire );

private:
	QByteArray m_in;	// buffer containing unprocessed bytes we received
	int m_error;
	Transfer* m_inTransfer; // the transfer that is being received
	int m_state;		// represents the protocol's overall state
	YMSGProtocol* m_YMSGProtocol;

};

#endif