7 #include <sys/socket.h>
9 #include "download-provider-config.h"
10 #include "download-provider-notification.h"
11 #include "download-provider-pthread.h"
12 #include "download-provider-log.h"
14 extern fd_set g_download_provider_socket_readset;
15 extern fd_set g_download_provider_socket_exceptset;
17 int get_download_request_id(void)
21 static int last_uniquetime = 0;
24 uniquetime = (int)time(NULL);
25 gettimeofday(&tval, NULL);
26 if (tval.tv_usec == 0)
27 uniquetime = uniquetime + (tval.tv_usec + 1) % 0xfffff;
29 uniquetime = uniquetime + tval.tv_usec;
30 TRACE_DEBUG_INFO_MSG("ID : %d", uniquetime);
31 } while (last_uniquetime == uniquetime);
32 last_uniquetime = uniquetime; // store
36 void clear_socket(download_clientinfo *clientinfo)
40 if (clientinfo->clientfd) {
41 FD_CLR(clientinfo->clientfd, &g_download_provider_socket_readset);
42 FD_CLR(clientinfo->clientfd, &g_download_provider_socket_exceptset);
43 shutdown(clientinfo->clientfd, 0);
44 fdatasync(clientinfo->clientfd);
45 close(clientinfo->clientfd);
46 clientinfo->clientfd = 0;
50 void clear_clientinfo(download_clientinfo *clientinfo)
52 TRACE_DEBUG_INFO_MSG("[TEST] clear [%p]",clientinfo);
57 clear_socket(clientinfo);
59 CLIENT_MUTEX_LOCK(&(clientinfo->client_mutex));
60 if (clientinfo->requestinfo) {
61 clientinfo->requestinfo->requestid = 0;
62 if (clientinfo->requestinfo->client_packagename.length > 0
63 && clientinfo->requestinfo->client_packagename.str)
64 free(clientinfo->requestinfo->client_packagename.str);
65 clientinfo->requestinfo->client_packagename.str = NULL;
66 if (clientinfo->requestinfo->url.str)
67 free(clientinfo->requestinfo->url.str);
68 clientinfo->requestinfo->url.str = NULL;
69 if (clientinfo->requestinfo->install_path.str)
70 free(clientinfo->requestinfo->install_path.str);
71 clientinfo->requestinfo->install_path.str = NULL;
72 if (clientinfo->requestinfo->filename.str)
73 free(clientinfo->requestinfo->filename.str);
74 clientinfo->requestinfo->filename.str = NULL;
75 if (clientinfo->requestinfo->service_data.str)
76 free(clientinfo->requestinfo->service_data.str);
77 clientinfo->requestinfo->service_data.str = NULL;
78 if (clientinfo->requestinfo->headers.rows) {
80 for (i = 0; i < clientinfo->requestinfo->headers.rows;
82 if (clientinfo->requestinfo->headers.str[i].str)
83 free(clientinfo->requestinfo->headers.
85 clientinfo->requestinfo->headers.str[i].str =
88 free(clientinfo->requestinfo->headers.str);
89 clientinfo->requestinfo->headers.str = NULL;
91 free(clientinfo->requestinfo);
92 clientinfo->requestinfo = NULL;
94 if (clientinfo->downloadinginfo)
95 free(clientinfo->downloadinginfo);
96 clientinfo->downloadinginfo = NULL;
97 if (clientinfo->downloadinfo)
98 free(clientinfo->downloadinfo);
99 clientinfo->downloadinfo = NULL;
100 if (clientinfo->tmp_saved_path)
101 free(clientinfo->tmp_saved_path);
102 clientinfo->tmp_saved_path = NULL;
103 if (clientinfo->ui_notification_handle || clientinfo->service_handle)
104 destroy_appfw_notification(clientinfo);
105 CLIENT_MUTEX_UNLOCK(&(clientinfo->client_mutex));
106 CLIENT_MUTEX_DESTROY(&(clientinfo->client_mutex));
107 memset(clientinfo, 0x00, sizeof(download_clientinfo));
112 void clear_clientinfoslot(download_clientinfo_slot *clientinfoslot)
117 download_clientinfo *clientinfo =
118 (download_clientinfo *) clientinfoslot->clientinfo;
119 clear_clientinfo(clientinfo);
120 clientinfoslot->clientinfo = NULL;
123 int get_downloading_count(download_clientinfo_slot *clientinfo_list)
127 for (i = 0; i < MAX_CLIENT; i++) {
128 if (clientinfo_list[i].clientinfo) {
129 if (clientinfo_list[i].clientinfo->state ==
130 DOWNLOAD_STATE_DOWNLOADING
131 || clientinfo_list[i].clientinfo->state ==
132 DOWNLOAD_STATE_INSTALLING
133 || clientinfo_list[i].clientinfo->state ==
134 DOWNLOAD_STATE_READY)
141 int get_same_request_slot_index(download_clientinfo_slot *clientinfo_list,
146 if (!clientinfo_list || !requestid)
149 for (i = 0; i < MAX_CLIENT; i++) {
150 if (clientinfo_list[i].clientinfo
151 && clientinfo_list[i].clientinfo->requestinfo) {
152 if (clientinfo_list[i].clientinfo->requestinfo->
153 requestid == requestid) {
161 int get_empty_slot_index(download_clientinfo_slot *clientinfo_list)
165 if (!clientinfo_list)
168 for (i = 0; i < MAX_CLIENT; i++)
169 if (!clientinfo_list[i].clientinfo)