initial work for server list implementation
This commit is contained in:
parent
acc7b0df77
commit
e5d868fe20
6 changed files with 249 additions and 32 deletions
60
llcon.pro
60
llcon.pro
|
@ -48,25 +48,26 @@ FORMS += src/llconclientdlgbase.ui \
|
||||||
src/chatdlgbase.ui \
|
src/chatdlgbase.ui \
|
||||||
src/aboutdlgbase.ui
|
src/aboutdlgbase.ui
|
||||||
|
|
||||||
HEADERS += src/buffer.h \
|
HEADERS += src/audiomixerboard.h \
|
||||||
src/global.h \
|
src/buffer.h \
|
||||||
src/socket.h \
|
|
||||||
src/channel.h \
|
src/channel.h \
|
||||||
src/util.h \
|
src/chatdlg.h \
|
||||||
src/client.h \
|
src/client.h \
|
||||||
src/server.h \
|
src/clientsettingsdlg.h \
|
||||||
src/settings.h \
|
src/global.h \
|
||||||
src/protocol.h \
|
src/llconclientdlg.h \
|
||||||
|
src/llconserverdlg.h \
|
||||||
src/multicolorled.h \
|
src/multicolorled.h \
|
||||||
src/multicolorledbar.h \
|
src/multicolorledbar.h \
|
||||||
src/audiomixerboard.h \
|
src/protocol.h \
|
||||||
|
src/server.h \
|
||||||
|
src/serverlist.h \
|
||||||
src/serverlogging.h \
|
src/serverlogging.h \
|
||||||
src/testbench.h \
|
src/settings.h \
|
||||||
|
src/socket.h \
|
||||||
src/soundbase.h \
|
src/soundbase.h \
|
||||||
src/llconserverdlg.h \
|
src/testbench.h \
|
||||||
src/chatdlg.h \
|
src/util.h \
|
||||||
src/llconclientdlg.h \
|
|
||||||
src/clientsettingsdlg.h \
|
|
||||||
libs/celt/celt.h \
|
libs/celt/celt.h \
|
||||||
libs/celt/celt_types.h \
|
libs/celt/celt_types.h \
|
||||||
libs/celt/celt_header.h \
|
libs/celt/celt_header.h \
|
||||||
|
@ -99,24 +100,25 @@ HEADERS += src/buffer.h \
|
||||||
libs/celt/stack_alloc.h \
|
libs/celt/stack_alloc.h \
|
||||||
libs/celt/vq.h
|
libs/celt/vq.h
|
||||||
|
|
||||||
SOURCES += src/buffer.cpp \
|
SOURCES += src/audiomixerboard.cpp \
|
||||||
src/main.cpp \
|
src/buffer.cpp \
|
||||||
src/socket.cpp \
|
|
||||||
src/channel.cpp \
|
src/channel.cpp \
|
||||||
src/util.cpp \
|
|
||||||
src/llconclientdlg.cpp \
|
|
||||||
src/clientsettingsdlg.cpp \
|
|
||||||
src/llconserverdlg.cpp \
|
|
||||||
src/chatdlg.cpp \
|
src/chatdlg.cpp \
|
||||||
src/client.cpp \
|
src/client.cpp \
|
||||||
src/server.cpp \
|
src/clientsettingsdlg.cpp \
|
||||||
src/settings.cpp \
|
src/llconclientdlg.cpp \
|
||||||
src/protocol.cpp \
|
src/llconserverdlg.cpp \
|
||||||
|
src/main.cpp \
|
||||||
src/multicolorled.cpp \
|
src/multicolorled.cpp \
|
||||||
src/multicolorledbar.cpp \
|
src/multicolorledbar.cpp \
|
||||||
src/audiomixerboard.cpp \
|
src/protocol.cpp \
|
||||||
|
src/server.cpp \
|
||||||
|
src/serverlist.cpp \
|
||||||
src/serverlogging.cpp \
|
src/serverlogging.cpp \
|
||||||
|
src/settings.cpp \
|
||||||
|
src/socket.cpp \
|
||||||
src/soundbase.cpp \
|
src/soundbase.cpp \
|
||||||
|
src/util.cpp \
|
||||||
libs/celt/bands.c \
|
libs/celt/bands.c \
|
||||||
libs/celt/celt.c \
|
libs/celt/celt.c \
|
||||||
libs/celt/cwrs.c \
|
libs/celt/cwrs.c \
|
||||||
|
@ -139,12 +141,12 @@ SOURCES += src/buffer.cpp \
|
||||||
libs/celt/vq.c
|
libs/celt/vq.c
|
||||||
|
|
||||||
DISTFILES += AUTHORS \
|
DISTFILES += AUTHORS \
|
||||||
COPYING \
|
|
||||||
NEWS \
|
|
||||||
TODO \
|
|
||||||
README \
|
|
||||||
INSTALL \
|
|
||||||
ChangeLog \
|
ChangeLog \
|
||||||
|
COPYING \
|
||||||
|
INSTALL \
|
||||||
|
NEWS \
|
||||||
|
README \
|
||||||
|
TODO \
|
||||||
libs\celt\AUTHORS \
|
libs\celt\AUTHORS \
|
||||||
libs\celt\ChangeLog \
|
libs\celt\ChangeLog \
|
||||||
libs\celt\COPYING \
|
libs\celt\COPYING \
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
#define PROTMESSID_NET_BLSI_FACTOR 12 // OLD (not used anymore)
|
#define PROTMESSID_NET_BLSI_FACTOR 12 // OLD (not used anymore)
|
||||||
#define PROTMESSID_CHANNEL_GAIN 13 // set channel gain for mix
|
#define PROTMESSID_CHANNEL_GAIN 13 // set channel gain for mix
|
||||||
#define PROTMESSID_CONN_CLIENTS_LIST 14 // connected client list
|
#define PROTMESSID_CONN_CLIENTS_LIST 14 // connected client list
|
||||||
#define PROTMESSID_SERVER_FULL 15 // server full message
|
#define PROTMESSID_SERVER_FULL 15 // OLD (not used anymore)
|
||||||
#define PROTMESSID_REQ_CONN_CLIENTS_LIST 16 // request connected client list
|
#define PROTMESSID_REQ_CONN_CLIENTS_LIST 16 // request connected client list
|
||||||
#define PROTMESSID_CHANNEL_NAME 17 // set channel name for fader tag
|
#define PROTMESSID_CHANNEL_NAME 17 // set channel name for fader tag
|
||||||
#define PROTMESSID_CHAT_TEXT 18 // contains a chat text
|
#define PROTMESSID_CHAT_TEXT 18 // contains a chat text
|
||||||
|
@ -53,6 +53,22 @@
|
||||||
#define PROTMESSID_DISCONNECTION 22 // disconnection
|
#define PROTMESSID_DISCONNECTION 22 // disconnection
|
||||||
#define PROTMESSID_REQ_CHANNEL_NAME 23 // request channel name for fader tag
|
#define PROTMESSID_REQ_CHANNEL_NAME 23 // request channel name for fader tag
|
||||||
|
|
||||||
|
// message IDs of connection less messages (CLM) -> start at 1000
|
||||||
|
|
||||||
|
// TODO implementation of the messages...
|
||||||
|
|
||||||
|
#define PROTMESSID_CLM_PING_MS 1001 // for measuring ping time
|
||||||
|
#define PROTMESSID_CLM_SERVER_FULL 1002 // server full message
|
||||||
|
#define PROTMESSID_CLM_SERVER_LIST 1003 // server list
|
||||||
|
#define PROTMESSID_CLM_REQ_SERVER_LIST 1004 // request server list
|
||||||
|
#define PROTMESSID_CLM_SEND_EMPTY_MESSAGE 1005 // an empty message shall be send
|
||||||
|
#define PROTMESSID_CLM_EMPTY_MESSAGE 1006 // empty message
|
||||||
|
#define PROTMESSID_CLM_REGISTER_SERVER 1007 // register server
|
||||||
|
#define PROTMESSID_CLM_UNREGISTER_SERVER 1008 // unregister server
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// lengths of message as defined in protocol.cpp file
|
// lengths of message as defined in protocol.cpp file
|
||||||
#define MESS_HEADER_LENGTH_BYTE 7 // TAG (2), ID (2), cnt (1), length (2)
|
#define MESS_HEADER_LENGTH_BYTE 7 // TAG (2), ID (2), cnt (1), length (2)
|
||||||
#define MESS_LEN_WITHOUT_DATA_BYTE ( MESS_HEADER_LENGTH_BYTE + 2 /* CRC (2) */ )
|
#define MESS_LEN_WITHOUT_DATA_BYTE ( MESS_HEADER_LENGTH_BYTE + 2 /* CRC (2) */ )
|
||||||
|
|
26
src/serverlist.cpp
Executable file
26
src/serverlist.cpp
Executable file
|
@ -0,0 +1,26 @@
|
||||||
|
/******************************************************************************\
|
||||||
|
* Copyright (c) 2004-2011
|
||||||
|
*
|
||||||
|
* Author(s):
|
||||||
|
* Volker Fischer
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License as published by the Free Software
|
||||||
|
* Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 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 "serverlist.h"
|
||||||
|
|
165
src/serverlist.h
Executable file
165
src/serverlist.h
Executable file
|
@ -0,0 +1,165 @@
|
||||||
|
/******************************************************************************\
|
||||||
|
* Copyright (c) 2004-2011
|
||||||
|
*
|
||||||
|
* Author(s):
|
||||||
|
* Volker Fischer
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License as published by the Free Software
|
||||||
|
* Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 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
|
||||||
|
*
|
||||||
|
\******************************************************************************/
|
||||||
|
|
||||||
|
#if !defined ( SERVERLIST_HOIJH8OUWEF_WFEIOBU_3_43445KJIUHF1912__INCLUDED_ )
|
||||||
|
#define SERVERLIST_HOIJH8OUWEF_WFEIOBU_3_43445KJIUHF1912__INCLUDED_
|
||||||
|
|
||||||
|
#include <qlocale.h>
|
||||||
|
#include <qlist.h>
|
||||||
|
#include "global.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
MAIN POINTS:
|
||||||
|
|
||||||
|
- Currently, if you want to run a private server, you have to open the
|
||||||
|
firewall of your computer at the correct ports and introduce a port
|
||||||
|
forwarding at your router to get it work. Using a central server would
|
||||||
|
simplify the process. The user who wants to run a llcon server just
|
||||||
|
registers his server a the central server and a mechanism implemented
|
||||||
|
in the protocol opens the firewall similar to STUN.
|
||||||
|
|
||||||
|
- Having private llcon servers will increase the probability that a server
|
||||||
|
is in the required minimum range of 1000 km of the clients position.
|
||||||
|
|
||||||
|
- The problem is that private servers are not reliable, they can be turned
|
||||||
|
off at any time.
|
||||||
|
|
||||||
|
- The private server owner maybe only wants to enable his friends to use
|
||||||
|
the server but if it is registered at the central server, everybody sees
|
||||||
|
the new server. Maybe an authentication mechanism might be implemented for
|
||||||
|
this purpose.
|
||||||
|
|
||||||
|
REQUIREMENTS:
|
||||||
|
|
||||||
|
- The client sets the URL of the central llcon server and can get a list of
|
||||||
|
all currently activated and registered private llcon servers. If the user
|
||||||
|
clicks on the server of his choice, he gets connected to this server.
|
||||||
|
|
||||||
|
- The server list must be available in both cases: if the client is connected
|
||||||
|
to the central server or not.
|
||||||
|
|
||||||
|
- The server list contains the name of the server, an optional topic, an
|
||||||
|
optional location, the number of connected users and a ping time which is
|
||||||
|
updated as long as the server list is visible (similar to the ping measurement
|
||||||
|
in the general settings dialog). Additional information may be also present
|
||||||
|
in the list like reliability of the server, etc.
|
||||||
|
|
||||||
|
- If a user starts the server for the first time, he gets automatically asked
|
||||||
|
if he wants to register his server at the central server. His choice will be
|
||||||
|
stored in an ini-file.
|
||||||
|
|
||||||
|
CONNECTION PROCESS:
|
||||||
|
|
||||||
|
* The private server contacts the central server and registers through some
|
||||||
|
protocol mechanism.
|
||||||
|
|
||||||
|
* If a client requests the server list from the central server, the central
|
||||||
|
server sends the IP address of the client to each registered private servers
|
||||||
|
so that they can immediately send a "firewall opening" UDP packet to this IP
|
||||||
|
address. If the client now sends ping messages to each of the private servers
|
||||||
|
in the list, the firewalls and routers are prepared for receiving UDP packets
|
||||||
|
from this IP address and will tunnel it through. Note: this mechanism will not
|
||||||
|
work in a private network.
|
||||||
|
|
||||||
|
* The central server polls all registered private servers in regular intervals
|
||||||
|
to make sure they are still present. If a private server is shut down, it
|
||||||
|
sends a shutdown message to the central server.
|
||||||
|
|
||||||
|
CONSEQUENCES:
|
||||||
|
|
||||||
|
- A new connection type is required: connection without transferring audio data,
|
||||||
|
just protocol.
|
||||||
|
|
||||||
|
- It must be possible to maintain the regular and new connection at the same
|
||||||
|
time.
|
||||||
|
|
||||||
|
- It has to be checked for how long a firewall is opened after the "firewall
|
||||||
|
opening" UDP packet was send. Maybe this message has to be repeated in regular
|
||||||
|
intervals (but not too long since maybe the client does not even want to connect
|
||||||
|
to this particular private server).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Classes ********************************************************************/
|
||||||
|
class CServerListProperties
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CServerListProperties() :
|
||||||
|
strName ( "" ),
|
||||||
|
strTopic ( "" ),
|
||||||
|
eCountry ( QLocale::AnyCountry ),
|
||||||
|
strCity ( "" ),
|
||||||
|
iNumClients ( 0 ),
|
||||||
|
iMaxNumClients ( 0 ),
|
||||||
|
bPermanentOnline ( false ) {}
|
||||||
|
|
||||||
|
virtual ~CServerListProperties() {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// name of the server
|
||||||
|
QString strName;
|
||||||
|
|
||||||
|
// topic of the current jam session or server
|
||||||
|
QString strTopic;
|
||||||
|
|
||||||
|
// country in which the server is located
|
||||||
|
QLocale::Country eCountry;
|
||||||
|
|
||||||
|
// city in which the server is located
|
||||||
|
QString strCity;
|
||||||
|
|
||||||
|
// current number of connected clients
|
||||||
|
int iNumClients;
|
||||||
|
|
||||||
|
// maximum number of clients which can connect to the server at the same
|
||||||
|
// time
|
||||||
|
int iMaxNumClients;
|
||||||
|
|
||||||
|
// is the server permanently online or not (flag)
|
||||||
|
bool bPermanentOnline;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CServerList : public QList<CServerListProperties>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CServerList() {}
|
||||||
|
virtual ~CServerList() {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CServerListManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CServerListManager() {}
|
||||||
|
virtual ~CServerListManager() {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* !defined ( SERVERLIST_HOIJH8OUWEF_WFEIOBU_3_43445KJIUHF1912__INCLUDED_ ) */
|
|
@ -99,7 +99,7 @@ void CSocket::OnDataReceived()
|
||||||
|
|
||||||
if ( bIsClient )
|
if ( bIsClient )
|
||||||
{
|
{
|
||||||
// client
|
// client:
|
||||||
// check if packet comes from the server we want to connect
|
// check if packet comes from the server we want to connect
|
||||||
if ( !( pChannel->GetAddress() == RecHostAddr ) )
|
if ( !( pChannel->GetAddress() == RecHostAddr ) )
|
||||||
{
|
{
|
||||||
|
@ -124,7 +124,7 @@ void CSocket::OnDataReceived()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// server
|
// server:
|
||||||
if ( pServer->PutData ( vecbyRecBuf, iNumBytesRead, RecHostAddr ) )
|
if ( pServer->PutData ( vecbyRecBuf, iNumBytesRead, RecHostAddr ) )
|
||||||
{
|
{
|
||||||
// this was an audio packet, start server
|
// this was an audio packet, start server
|
||||||
|
|
|
@ -666,6 +666,10 @@
|
||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\serverlist.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\serverlogging.cpp"
|
RelativePath="..\src\serverlogging.cpp"
|
||||||
>
|
>
|
||||||
|
@ -1510,6 +1514,10 @@
|
||||||
RelativePath="..\src\server.h"
|
RelativePath="..\src\server.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\serverlist.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\serverlogging.h"
|
RelativePath="..\src\serverlogging.h"
|
||||||
>
|
>
|
||||||
|
|
Loading…
Reference in a new issue