[Bugfix][API-471][SMS]After sending a long message, the API returns garbled characters.
Change-Id: Ie73e638e6d1c5f830a431d1abc19e6e09a9dc518
diff --git a/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp b/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp
index 5101671..0a44eba 100755
--- a/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp
+++ b/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp
@@ -165,7 +165,7 @@
*handle = sms_storage_index;
return 0;
}
-int recvfrom_server(void *resp)
+int recvfrom_server(void *resp, int id)
{
char recv_buf[4096] = {0};
int recv_len = 0;
@@ -174,21 +174,24 @@
int32_t resp_type = 0;
int32_t request = 0;
int32_t slot_id = 0;
- int32_t error = 0;
- recv_len = recvfrom(sms_instance.sock_fd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr*)&sms_instance.addrfrom, (socklen_t*)&len);
- LYDBGLOG("##################recv length:%d\n", recv_len);
- if(recv_len <= 0){
- LYERRLOG("recvform error: %s\n", strerror(errno));
- return SMS_FAIL;
- }
- resp_parcel.setData((uint8_t *)recv_buf,recv_len);
- resp_parcel.setDataPosition(0);
- if(resp_parcel.dataAvail() > 0)
+ int32_t error = -1;
+ while (request != id)
{
- resp_parcel.readInt32(&resp_type);
- resp_parcel.readInt32(&request);
- resp_parcel.readInt32(&slot_id);
- resp_parcel.readInt32(&error);
+ recv_len = recvfrom(sms_instance.sock_fd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr*)&sms_instance.addrfrom, (socklen_t*)&len);
+ LYDBGLOG("##################recv length:%d\n", recv_len);
+ if(recv_len <= 0){
+ LYERRLOG("recvform error: %s\n", strerror(errno));
+ return SMS_FAIL;
+ }
+ resp_parcel.setData((uint8_t *)recv_buf,recv_len);
+ resp_parcel.setDataPosition(0);
+ if(resp_parcel.dataAvail() > 0)
+ {
+ resp_parcel.readInt32(&resp_type);
+ resp_parcel.readInt32(&request);
+ resp_parcel.readInt32(&slot_id);
+ resp_parcel.readInt32(&error);
+ }
}
LYDBGLOG("resp data: %d,%d, %d,%d\n", resp_type, request, slot_id, error);
switch(request)
@@ -398,11 +401,11 @@
client.request = RIL_REQUEST_SEND_SMS;
client.uToken = GuToken;
client.paramLen = 3;
-
+ bzero(client.param, 8*1024);
sprintf(client.param, "%s %d %s\n", telephony_num, charset, msg);
pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server(NULL);
+ ret = recvfrom_server(NULL, RIL_REQUEST_SEND_SMS);
pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
return ret;
@@ -417,10 +420,11 @@
client.request = LYNQ_REQUEST_READ_SMS_FROM_MEMORY;
client.uToken = GuToken;
client.paramLen = 1;
+ bzero(client.param, 8*1024);
sprintf(client.param, "%d", index);
pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server((void *)&sms_msg_info);
+ ret = recvfrom_server((void *)&sms_msg_info, LYNQ_REQUEST_READ_SMS_FROM_MEMORY);
pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
if(ret == 0)
{
@@ -461,7 +465,7 @@
client.paramLen = 0;
pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server(service_num);
+ ret = recvfrom_server(service_num, RIL_REQUEST_GET_SMSC_ADDRESS);
pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
return ret;
@@ -483,10 +487,11 @@
client.request = RIL_REQUEST_SET_SMSC_ADDRESS;
client.uToken = GuToken;
client.paramLen = 1;
+ bzero(client.param, 8*1024);
sprintf(client.param, "%s", service_num);
pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server(NULL);
+ ret = recvfrom_server(NULL, RIL_REQUEST_SET_SMSC_ADDRESS);
pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
return ret;
@@ -501,7 +506,7 @@
client.paramLen = 0;
pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server((void *)index_list);
+ ret = recvfrom_server((void *)index_list, LYNQ_REQUEST_LIST_SMS_FROM_MEMORY);
pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
return ret;
}
@@ -517,7 +522,7 @@
sprintf(client.param, "%d", index);
pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server(NULL);
+ ret = recvfrom_server(NULL, LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY);
pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
return ret;
}