blob: f49396af7b58109872f05c290eb756bd843a2688 (
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
106
107
108
|
/*
Kopete Groupwise Protocol
coreprotocol.h- the core GroupWise protocol
Copyright (c) 2004 SUSE Linux AG http://www.suse.com
Based on Iris, Copyright (C) 2003 Justin Karneges
Kopete (c) 2002-2004 by the Kopete developers <[email protected]>
*************************************************************************
* *
* 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 GW_CORE_PROTOCOL_H
#define GW_CORE_PROTOCOL_H
#include <qcstring.h>
#include <qobject.h>
#include <qptrlist.h>
class FlapProtocol;
class SnacProtocol;
class Transfer;
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 QCString & );
protected:
/**
* Check that there is data to read, and set the protocol's state if there isn't any.
*/
bool okToProceed( const QDataStream &din );
/**
* 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
SnacProtocol* m_snacProtocol;
FlapProtocol* m_flapProtocol;
};
#endif
|