Skip to content

Commit dfaf546

Browse files
Merge pull request #46 from CppComet/alfa
v3.33
2 parents 3624110 + f00a036 commit dfaf546

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+14613
-94
lines changed

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ FEATURES:
55
IMPROVEMENTS:
66
BUG FIXES:
77

8+
## v3.33
9+
10+
FEATURES:
11+
* video api 1.0
12+
13+
BUG FIXES:
14+
* fixed bug with large mysql packets
15+
816
## v3.32
917

1018
FEATURES:

CMakeLists.txt

+17-4
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ MARK_AS_ADVANCED(
7575
MYSQL_LIBRARY
7676
MYSQL_INCLUDE_DIR
7777
)
78-
###########################################
79-
include_directories(${MYSQL_INCLUDE_DIR})
78+
###########################################
79+
include_directories(${MYSQL_INCLUDE_DIR} src/freeswitch-esl/include)
8080

8181

8282
# Расположение заголовочных файлов
@@ -95,6 +95,19 @@ execute_process( COMMAND mv lex.yy.c src/lex.yy.c)
9595
execute_process( COMMAND mv y.tab.c src/y.tab.c)
9696
execute_process( COMMAND mv y.tab.h src/y.tab.h)
9797

98+
set(ESL_EXE
99+
src/freeswitch-esl/cJSON.c
100+
src/freeswitch-esl/cJSON_Utils.c
101+
src/freeswitch-esl/esl.c
102+
src/freeswitch-esl/esl_buffer.c
103+
src/freeswitch-esl/esl_config.c
104+
src/freeswitch-esl/esl_event.c
105+
src/freeswitch-esl/esl_json.c
106+
src/freeswitch-esl/esl_threadmutex.c)
107+
108+
set(TINYXML2_EXE
109+
src/tinyxml2/tinyxml2.cpp)
110+
98111

99112
# Установка переменной со списком исходников для исполняемого файла
100113
set(SOURCE_EXE
@@ -127,8 +140,8 @@ set(SOURCE_EXE
127140
src/lex.yy.o
128141
src/CometQL.cc)
129142

130-
# Создает исполняемый файл с именем cpp_comet из исходников
131-
add_executable(cpp_comet ${SOURCE_EXE} )
143+
# Создает исполняемый файл с именем cpp_comet_coverage из исходников
144+
add_executable(cpp_comet ${ESL_EXE} ${SOURCE_EXE} ${TINYXML2_EXE})
132145

133146
# Подключение библиотеки pthreads
134147
target_link_libraries (cpp_comet ${CMAKE_THREAD_LIBS_INIT} ${MYSQL_LIBRARIES} crypt uuid )

api/cometVideoApi.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,11 @@ cometVideoApi._init = function()
204204
cometVideoApi.startCallWaiting()
205205
}
206206

207+
cometVideoApi.isInCall = function()
208+
{
209+
return cometVideoApi.opt.activeCallEvent !== undefined
210+
}
211+
207212
cometVideoApi.startCallWaiting = function()
208213
{
209214
// Пришли данные для подключения к sip серверу
@@ -1502,4 +1507,3 @@ cometVideoApi.isFullScreenSupport = function()
15021507

15031508
return false;
15041509
}
1505-

coverage/CMakeLists.txt

+20-7
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ MARK_AS_ADVANCED(
7979
MYSQL_INCLUDE_DIR
8080
)
8181
###########################################
82-
include_directories(${MYSQL_INCLUDE_DIR})
82+
include_directories(${MYSQL_INCLUDE_DIR} ../src/freeswitch-esl/include)
8383

8484

8585
# Расположение заголовочных файлов
@@ -92,14 +92,27 @@ execute_process( COMMAND bison -d --verbose --debug ../src/CometQL.y -o ../src/C
9292
execute_process( COMMAND yacc -d --verbose --debug ../src/CometQL.y -o ../src/CometQL.cc)
9393
execute_process( COMMAND cc -c ../src/lex.yy.c -o ../src/lex.yy.o)
9494

95-
execute_process( COMMAND mv ../CometQL.tab.c ../src/CometQL.tab.c)
96-
execute_process( COMMAND mv ../CometQL.tab.h ../src/CometQL.tab.h)
97-
execute_process( COMMAND mv ../lex.yy.c ../src/lex.yy.c)
98-
execute_process( COMMAND mv ../y.tab.c ../src/y.tab.c)
99-
execute_process( COMMAND mv ../y.tab.h ../src/y.tab.h)
95+
execute_process( COMMAND mv ./CometQL.tab.c ../src/CometQL.tab.c)
96+
execute_process( COMMAND mv ./CometQL.tab.h ../src/CometQL.tab.h)
97+
execute_process( COMMAND mv ./lex.yy.c ../src/lex.yy.c)
98+
execute_process( COMMAND mv ./y.tab.c ../src/y.tab.c)
99+
execute_process( COMMAND mv ./y.tab.h ../src/y.tab.h)
100100

101101
add_definitions(-DUSE_COVERAGE=1)
102102

103+
set(ESL_EXE
104+
../src/freeswitch-esl/cJSON.c
105+
../src/freeswitch-esl/cJSON_Utils.c
106+
../src/freeswitch-esl/esl.c
107+
../src/freeswitch-esl/esl_buffer.c
108+
../src/freeswitch-esl/esl_config.c
109+
../src/freeswitch-esl/esl_event.c
110+
../src/freeswitch-esl/esl_json.c
111+
../src/freeswitch-esl/esl_threadmutex.c)
112+
113+
set(TINYXML2_EXE
114+
../src/tinyxml2/tinyxml2.cpp)
115+
103116
# Установка переменной со списком исходников для исполняемого файла
104117
set(SOURCE_EXE
105118
../src/hashlib2plus/src/hl_md5.cpp
@@ -132,7 +145,7 @@ set(SOURCE_EXE
132145
../src/CometQL.cc)
133146

134147
# Создает исполняемый файл с именем cpp_comet_coverage из исходников
135-
add_executable(cpp_comet_coverage ${SOURCE_EXE} )
148+
add_executable(cpp_comet_coverage ${ESL_EXE} ${SOURCE_EXE} ${TINYXML2_EXE})
136149

137150
# Подключение библиотеки pthreads
138151
target_link_libraries (cpp_comet_coverage ${CMAKE_THREAD_LIBS_INIT} ${MYSQL_LIBRARIES} crypt uuid gcov )

db.sql

+17
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,20 @@ CREATE TABLE IF NOT EXISTS `options` (
110110
`value` varbinary(250) NOT NULL,
111111
PRIMARY KEY (`section`,`name`)
112112
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
113+
114+
--
115+
-- Table structure `conference`
116+
--
117+
118+
CREATE TABLE IF NOT EXISTS `conference` (
119+
`name` varchar(32) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
120+
`user_id` int(11) NOT NULL,
121+
`caller_id` int(11) NOT NULL,
122+
`message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
123+
`mode` varchar(32) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT '',
124+
`stream` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT '',
125+
`node` varchar(64) NOT NULL DEFAULT '0',
126+
`time` int(13) NOT NULL DEFAULT '0',
127+
`active` int(1) NOT NULL DEFAULT '0' COMMENT '',
128+
PRIMARY KEY (`name`,`user_id`)
129+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='';

src/Client_connection.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ int Client_connection::ws_subscription(thread_data* local_buf, char* event_data,
180180
while(it != local_buf->wsCluster.end())
181181
{
182182
auto link = *it;
183-
link->query_format("INSERT INTO pipes_messages (name, event, message)VALUES('%s', 'subscription', '{\"user_id\":\"%d\",\"uuid\":\"%s\"');", subscriptions[i], web_user_id, web_user_uuid);
183+
link->query_format("cometqlcluster_v1; INSERT INTO pipes_messages (name, event, message)VALUES('%s', 'subscription', '{\"user_id\":\"%d\",\"uuid\":\"%s\"');", subscriptions[i], web_user_id, web_user_uuid);
184184
it++;
185185
}
186186
}
@@ -596,7 +596,7 @@ int Client_connection::send_pipe_count(thread_data* local_buf, char* pipe_name,
596596
{
597597
auto link = *it;
598598

599-
if(!link->query_format("SELECT users FROM pipes WHERE name = '%s'", pipe_name))
599+
if(!link->query_format("cometqlcluster_v1; SELECT users FROM pipes WHERE name = '%s'", pipe_name))
600600
{
601601
break;
602602
}
@@ -1407,7 +1407,7 @@ int Client_connection::web_pipe_msg_v2(thread_data* local_buf, char* event_data,
14071407
auto link = *it;
14081408

14091409
// @todo Проверять что если ошибка сетевая или что то ещё то повторять попытку.
1410-
link->query_format("INSERT INTO pipes_messages (name, event, message)VALUES('%s', '%s', '%s');", name, event_name, local_buf->answer_buf.getData());
1410+
link->query_format("cometqlcluster_v1; INSERT INTO pipes_messages (name, event, message)VALUES('%s', '%s', '%s');", name, event_name, local_buf->answer_buf.getData());
14111411
it++;
14121412
}
14131413

src/CometQL.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class tokPlace
8282
/**
8383
* Максимальное количество колонок в таблице
8484
*/
85-
#define MAX_COLUMNS_COUNT 10
85+
#define MAX_COLUMNS_COUNT 20
8686

8787
/**
8888
* Максимальный размер данных вмещаемых в одну ячейку таблицы

src/CometQLProxy_connection.cpp

+62-11
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,16 @@ CometQLProxy_connection::~CometQLProxy_connection()
5353

5454
int CometQLProxy_connection::proxy_query(int node, thread_data* local_buf, unsigned int PacketNomber)
5555
{
56+
std::string query("cometqlcluster_v1; ");
57+
query.append(local_buf->qInfo.StartQury);
58+
5659
if(local_buf->qInfo.command == TOK_SELECT || local_buf->qInfo.command == TOK_SHOW)
5760
{
58-
return proxy_union_select(node, local_buf->qInfo.StartQury, local_buf, PacketNomber);
61+
return proxy_union_select(node, query.data(), local_buf, PacketNomber);
5962
}
6063
else if(local_buf->qInfo.command == TOK_INSERT || local_buf->qInfo.command == TOK_DELETE)
6164
{
62-
return proxy_insert(node, local_buf->qInfo.StartQury, local_buf, PacketNomber);
65+
return proxy_insert(node, query.data(), local_buf, PacketNomber);
6366
}
6467
}
6568

@@ -96,8 +99,8 @@ int CometQLProxy_connection::proxy_union_select(int node, const char* query, thr
9699
{
97100
// @todo Проверять код ошибки и не паниковать если по коду ясно что проблема в самом запросе а не соединении.
98101
// @todo Проверять что если ошибка сетевая или что то ещё то повторять попытку.
99-
TagLoger::error(Log_CometQLCluster, 0, "CometQLProxy warn[6] on node=%s in query=%s\n", link->name(), query);
100-
102+
TagLoger::error(Log_CometQLCluster, 0, "CometQLProxy error[6] on node=%d in query=%s (errno=%d, error=%s)\n", node, query, mysql_errno(link->getLink()), mysql_error(link->getLink()));
103+
101104
bool isSuccess = false;
102105
// Если ошибка то ещё раз отправим запрос но на другую ноду
103106
auto it = local_buf->proxyCluster.begin();
@@ -134,14 +137,14 @@ int CometQLProxy_connection::proxy_union_select(int node, const char* query, thr
134137
}
135138
else
136139
{
137-
TagLoger::log(Log_CometQLCluster, 0, "CometQLProxy query:`%s` send to node=%d from %d\n", query, node, local_buf->proxyCluster.size());
140+
TagLoger::log(Log_CometQLCluster, 0, "CometQLProxy query:`%s` send to node=%d from %d (errno=%d, error=%s)\n", query, node, local_buf->proxyCluster.size(), mysql_errno(link->getLink()), mysql_error(link->getLink()));
138141
// Если задана node то выполнить запрос на конкретной ноде а не на всех нодах.
139142
link = local_buf->proxyCluster[node];
140143
if(!link->query(query))
141144
{
142145
// @todo Проверять код ошибки и не паниковать если по коду ясно что проблема в самом запросе а не соединении.
143146
// @todo Проверять что если ошибка сетевая или что то ещё то повторять попытку.
144-
TagLoger::error(Log_CometQLCluster, 0, "CometQLProxy error[6] on node=%d in query=%s\n", node, query);
147+
TagLoger::error(Log_CometQLCluster, 0, "CometQLProxy error[6] on node=%d in query=%s (errno=%d, error=%s)\n", node, query, mysql_errno(link->getLink()), mysql_error(link->getLink()));
145148
local_buf->qInfo.setError(mysql_error(link->getLink()), mysql_errno(link->getLink()));
146149
local_buf->answer_buf.unlock();
147150
Send_Err_Package(local_buf->qInfo.errorCode, local_buf->qInfo.errorText, ++PacketNomber, local_buf, this);
@@ -150,11 +153,19 @@ int CometQLProxy_connection::proxy_union_select(int node, const char* query, thr
150153
}
151154

152155
auto result = mysql_store_result(link->getLink());
156+
if(result == NULL)
157+
{
158+
TagLoger::error(Log_CometQLCluster, 0, "CometQLProxy error[12] on node=%d in query=%s (errno=%d, error=%s)\n", node, query, mysql_errno(link->getLink()), mysql_error(link->getLink()));
159+
local_buf->qInfo.setError(mysql_error(link->getLink()), mysql_errno(link->getLink()));
160+
local_buf->answer_buf.unlock();
161+
Send_Err_Package(local_buf->qInfo.errorCode, local_buf->qInfo.errorText, ++PacketNomber, local_buf, this);
162+
return 0;
163+
}
153164

154165
MYSQL_FIELD *field;
155166
while((field = mysql_fetch_field(result)))
156167
{
157-
printf("field name %s\n", field->name);
168+
//printf("field name %s\n", field->name);
158169
local_buf->sql.columns[num_fields] = field->name;
159170
num_fields++;
160171
if(num_fields >= MAX_COLUMNS_COUNT)
@@ -199,13 +210,21 @@ int CometQLProxy_connection::proxy_union_select(int node, const char* query, thr
199210

200211
isSuccess = true;
201212
auto result = mysql_store_result(link->getLink());
213+
if(result == NULL)
214+
{
215+
TagLoger::error(Log_CometQLCluster, 0, "CometQLProxy error[13] on node=%d in query=%s (errno=%d, error=%s)\n", link->name(), query, mysql_errno(link->getLink()), mysql_error(link->getLink()));
216+
local_buf->qInfo.setError(mysql_error(link->getLink()), mysql_errno(link->getLink()));
217+
local_buf->answer_buf.unlock();
218+
Send_Err_Package(local_buf->qInfo.errorCode, local_buf->qInfo.errorText, ++PacketNomber, local_buf, this);
219+
return 0;
220+
}
202221

203222
if(!isSendHeader)
204223
{
205224
MYSQL_FIELD *field;
206225
while((field = mysql_fetch_field(result)))
207226
{
208-
printf("field name %s\n", field->name);
227+
//printf("field name %s\n", field->name);
209228
local_buf->sql.columns[num_fields] = field->name;
210229
num_fields++;
211230
if(num_fields >= MAX_COLUMNS_COUNT)
@@ -222,10 +241,10 @@ int CometQLProxy_connection::proxy_union_select(int node, const char* query, thr
222241
{
223242
for(int i = 0; i < num_fields; i++)
224243
{
225-
printf("[%s]", row[i] ? row[i] : "NULL");
244+
//printf("[%s]", row[i] ? row[i] : "NULL");
226245
value[i] = row[i];
227246
}
228-
printf("\n");
247+
//printf("\n");
229248
answer += RowPackage(num_fields, value, ++PacketNomber, answer);
230249
}
231250
mysql_free_result(result);
@@ -433,6 +452,14 @@ int CometQLProxy_connection::query_router(thread_data* local_buf, int PacketNomb
433452
{
434453
return proxy_query(PROXY_TO_RANDOM, local_buf,PacketNomber); // return sql_select_from_pipes_settings(local_buf,PacketNomber);
435454
}
455+
else if(local_buf->qInfo.tokCompare("conference", local_buf->qInfo.tableName))
456+
{
457+
return proxy_query(PROXY_TO_RANDOM, local_buf,PacketNomber); // return sql_insert_into_conference(local_buf,PacketNomber);
458+
}
459+
else if(local_buf->qInfo.tokCompare("conference_members", local_buf->qInfo.tableName))
460+
{
461+
return proxy_query(PROXY_TO_RANDOM, local_buf,PacketNomber); // return sql_insert_into_conference(local_buf,PacketNomber);
462+
}
436463
else
437464
{
438465
return Send_Err_Package(SQL_ERR_NOT_EXIST, "Table doesn't exist", PacketNomber+1, local_buf, this);
@@ -481,8 +508,12 @@ int CometQLProxy_connection::query_router(thread_data* local_buf, int PacketNomb
481508
}
482509
else if(local_buf->qInfo.tokCompare("conference", local_buf->qInfo.tableName))
483510
{
484-
return proxy_query(PROXY_TO_ALL, local_buf,PacketNomber); // return sql_insert_into_conference(local_buf,PacketNomber);
511+
return proxy_query(PROXY_TO_RANDOM, local_buf,PacketNomber); // return sql_insert_into_conference(local_buf,PacketNomber);
485512
}
513+
else if(local_buf->qInfo.tokCompare("conference_members", local_buf->qInfo.tableName))
514+
{
515+
return proxy_query(PROXY_TO_RANDOM, local_buf,PacketNomber); // return sql_insert_into_conference(local_buf,PacketNomber);
516+
}
486517
else if(local_buf->qInfo.tokCompare("dialogs", local_buf->qInfo.tableName))
487518
{
488519
return proxy_query(PROXY_TO_ALL, local_buf,PacketNomber); // return sql_insert_into_dialogs(local_buf,PacketNomber);
@@ -528,6 +559,14 @@ int CometQLProxy_connection::query_router(thread_data* local_buf, int PacketNomb
528559
{
529560
return proxy_query(PROXY_TO_RANDOM, local_buf,PacketNomber); // return sql_delete_from_pipes_settings(local_buf,PacketNomber);
530561
}
562+
else if(local_buf->qInfo.tokCompare("conference", local_buf->qInfo.tableName))
563+
{
564+
return proxy_query(PROXY_TO_RANDOM, local_buf,PacketNomber); // return sql_insert_into_conference(local_buf,PacketNomber);
565+
}
566+
else if(local_buf->qInfo.tokCompare("conference_members", local_buf->qInfo.tableName))
567+
{
568+
return proxy_query(PROXY_TO_RANDOM, local_buf,PacketNomber); // return sql_insert_into_conference(local_buf,PacketNomber);
569+
}
531570
else
532571
{
533572
return Send_Err_Package(SQL_ERR_NOT_EXIST, "Table doesn't exist", PacketNomber+1, local_buf, this);
@@ -595,6 +634,12 @@ int CometQLProxy_connection::sql_select_from_pipes(thread_data* local_buf, unsig
595634
}
596635

597636
auto result = mysql_store_result(link->getLink());
637+
if(result == NULL)
638+
{
639+
TagLoger::error(Log_CometQLCluster, 0, "CometQLProxy error[14] on node=%d (errno=%d, error=%s)\n", link->name(), mysql_errno(link->getLink()), mysql_error(link->getLink()));
640+
continue;
641+
}
642+
598643
while((row = mysql_fetch_row(result)))
599644
{
600645
long int_size = 0;
@@ -678,6 +723,12 @@ int CometQLProxy_connection::sql_union_select_from_users_time(thread_data* local
678723
}
679724

680725
auto result = mysql_store_result(link->getLink());
726+
if(result == NULL)
727+
{
728+
TagLoger::error(Log_CometQLCluster, 0, "CometQLProxy error[15] on node=%d (errno=%d, error=%s)\n", link->name(), mysql_errno(link->getLink()), mysql_error(link->getLink()));
729+
continue;
730+
}
731+
681732
while((row = mysql_fetch_row(result)))
682733
{
683734
long time = 0;

0 commit comments

Comments
 (0)