summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuo Jinghua <sunmoon1997@gmail.com>2009-08-25 21:19:26 +0800
committerLuo Jinghua <sunmoon1997@gmail.com>2009-08-25 21:19:26 +0800
commit2cfc085237ebe43f82d2aedd3dd21b730874ac41 (patch)
tree46d98f4374cfd7d7dc23be8a2e1bb00db2801a7d
parent0f21921897fedb1fd34cc9435c56941daa7adfe7 (diff)
wrapper: cleanup and wip for vodlist_getchannel
-rw-r--r--wrapper/ppswrapper-client.c297
-rw-r--r--wrapper/ppswrapper-common.c23
-rw-r--r--wrapper/ppswrapper-server.c72
3 files changed, 299 insertions, 93 deletions
diff --git a/wrapper/ppswrapper-client.c b/wrapper/ppswrapper-client.c
index e803c6f..e5a504e 100644
--- a/wrapper/ppswrapper-client.c
+++ b/wrapper/ppswrapper-client.c
@@ -70,13 +70,16 @@ ppsw_client_connect_server(ppsw_client_t *self, int port)
return 0;
}
-static void free_categories(ppscategory* cat);
+static void
+free_categories(ppscategory* cat);
+
+static void
+ppsw_free_channel(ppschannel* ch);
ppsw_t*
ppsw_client_create(int port)
{
ppsw_client_t *self = malloc (sizeof (ppsw_client_t));
- int set = 1;
if (!self)
return NULL;
@@ -93,6 +96,7 @@ ppsw_client_create(int port)
goto spawn_server_failed;
self->categories = NULL;
+ self->channel = NULL;
self->callback = NULL;
self->configdir = NULL;
self->has_thread = 0;
@@ -182,6 +186,7 @@ ppsw_client_destroy(ppsw_t* super)
pthread_mutex_destroy (&self->mutex);
free_categories(self->categories);
+ ppsw_free_channel(self->channel);
free (self);
}
@@ -247,7 +252,7 @@ int ppsw_client_send_destroy(ppsw_t* super)
int ppsw_client_send_close(ppsw_t* super)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -268,7 +273,7 @@ int ppsw_client_send_add_item(ppsw_t* super,
const char* url,
int flags)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -293,19 +298,16 @@ int ppsw_client_send_add_item(ppsw_t* super,
int ppsw_client_send_remove_item(ppsw_t* super,
int fd)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
+ ppsw_packet_t p;
- if (ppsw_writeb(super, PPSW_SYNC) < 0)
- return -1;
- if (ppsw_writes(super, PPSW_REMOVE_ITEM) < 0)
+ if (ppsw_packet_init(&p, PPSW_REMOVE_ITEM, 4) < 0)
return -1;
- if (ppsw_writes(super, super->seq++) < 0)
- return -1;
- if (ppsw_writes(super, 4) < 0)
+ if (ppsw_packet_writel(&p, fd) < 0)
return -1;
- if (ppsw_writel(super, fd) < 0)
+ if (ppsw_send_packet(super, &p) < 0)
return -1;
if (ppsw_read_reply_msg(super, &msg) < 0)
@@ -319,7 +321,7 @@ int ppsw_client_send_play_item(ppsw_t* super,
int fd,
const char* valid_code)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -343,7 +345,7 @@ int ppsw_client_send_play_item(ppsw_t* super,
int ppsw_client_send_stop_item(ppsw_t* super,
int fd)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -364,7 +366,7 @@ int ppsw_client_send_stop_item(ppsw_t* super,
int ppsw_client_send_get_file_length(ppsw_t* super,
int fd)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -385,22 +387,17 @@ int ppsw_client_send_get_file_length(ppsw_t* super,
int ppsw_client_send_seek(ppsw_t* super,
int fd, unsigned int position)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
+ ppsw_packet_t p;
- if (ppsw_writeb(super, PPSW_SYNC) < 0)
+ if (ppsw_packet_init(&p, PPSW_SEEK, 8) < 0)
return -1;
- if (ppsw_writes(super, PPSW_SEEK) < 0)
- return -1;
- if (ppsw_writes(super, super->seq++) < 0)
- return -1;
- if (ppsw_writes(super, 8) < 0)
+ if (ppsw_packet_writel(&p, fd) < 0)
return -1;
-
- if (ppsw_writel(super, fd) < 0)
+ if (ppsw_packet_writel(&p, position) < 0)
return -1;
-
- if (ppsw_writel(super, position) < 0)
+ if (ppsw_send_packet(super, &p) < 0)
return -1;
if (ppsw_read_reply_msg(super, &msg) < 0)
@@ -413,7 +410,7 @@ int ppsw_client_send_seek(ppsw_t* super,
ppsvod_iteminfo *ppsw_client_send_get_item_info(ppsw_t* super,
int fd)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_msg_t msg;
ppsvod_iteminfo * info;
ppsw_packet_t p;
@@ -451,7 +448,7 @@ int ppsw_client_send_read(ppsw_t* super, int fd, char *buffer,
unsigned int length, unsigned int position,
struct timeval *wait_time)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_msg_t msg;
uint32_t retval;
int ret;
@@ -494,7 +491,7 @@ int ppsw_client_send_read(ppsw_t* super, int fd, char *buffer,
}
error = retval;
- if (ret > 0 && ppsw_packet_read(&p, buffer, ret) < 0) {
+ if (ret > 0 && ppsw_packet_read(&p, (uint8_t*)buffer, ret) < 0) {
return -1;
} else if (ret < 0) {
if (error == PPSW_EAGAIN)
@@ -509,7 +506,7 @@ int ppsw_client_send_read(ppsw_t* super, int fd, char *buffer,
int ppsw_client_send_drop_read(ppsw_t* super,
int fd)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -530,7 +527,7 @@ int ppsw_client_send_drop_read(ppsw_t* super,
int ppsw_client_send_get_event(ppsw_t* super,
int* index, pps_event* event)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_msg_t msg;
uint32_t val;
ppsw_packet_t p;
@@ -570,7 +567,7 @@ int ppsw_client_send_get_event(ppsw_t* super,
return -1;
event->lparam = val;
- if (ppsw_packet_read(&p, event->extra, PPS_EXTRA_MSG_LEN) < 0)
+ if (ppsw_packet_read(&p, (uint8_t*)event->extra, PPS_EXTRA_MSG_LEN) < 0)
return -1;
ppsw_packet_fini(&p);
@@ -581,7 +578,7 @@ int ppsw_client_send_get_event(ppsw_t* super,
int ppsw_client_send_get_time(ppsw_t* super,
struct timeval* tv)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_msg_t msg;
uint32_t sec;
uint32_t usec;
@@ -643,7 +640,7 @@ char* ppsw_client_send_get_config_dir(ppsw_t* super)
int ppsw_client_send_default_config_dir(ppsw_t* super)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -663,14 +660,14 @@ int ppsw_client_send_default_config_dir(ppsw_t* super)
int ppsw_client_send_save_config_dir(ppsw_t* super,
const char* path)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
if (ppsw_packet_init(&p, PPSW_SAVE_CONFIG_DIR,
ppsw_strlen(path) + 2) < 0)
return -1;
- if (ppsw_write_str(&p, path, -1) < 0)
+ if (ppsw_packet_write_str(&p, path, -1) < 0)
return -1;
if (ppsw_send_packet(super, &p) < 0)
return -1;
@@ -685,7 +682,7 @@ int ppsw_client_send_save_config_dir(ppsw_t* super,
int ppsw_client_send_vodlist_init(ppsw_t* super)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -704,7 +701,7 @@ int ppsw_client_send_vodlist_init(ppsw_t* super)
int ppsw_client_send_vodlist_uninit(ppsw_t* super)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -735,7 +732,8 @@ free_categories(ppscategory* cat)
}
static ppscategory*
-ppsw_read_single_category(ppsw_packet_t* p)
+ppsw_read_single_category(ppsw_packet_t* p,
+ int* hassubcat)
{
ppscategory* cat;
uint32_t val;
@@ -757,6 +755,9 @@ ppsw_read_single_category(ppsw_packet_t* p)
if (ppsw_packet_readl(p, &val) < 0)
goto read_name_fail;
cat->subcatnum = val;
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto read_name_fail;
+ *hassubcat = val;
cat->psubcat = NULL;
cat->next = NULL;
return cat;
@@ -775,12 +776,13 @@ ppsw_read_category(ppsw_packet_t* p, int catnum)
head = last = NULL;
for (i = 0; i < catnum; i++) {
- cat = ppsw_read_single_category(p);
+ int hassubcat = 0;
+ cat = ppsw_read_single_category(p, &hassubcat);
if (!cat) {
free_categories(head);
return NULL;
}
- if (cat->subcatnum) {
+ if (cat->subcatnum && hassubcat) {
cat->psubcat = ppsw_read_category(p, cat->subcatnum);
if (!cat->psubcat) {
free_categories(cat);
@@ -837,12 +839,202 @@ ppscategory* ppsw_client_send_vodlist_getcat(ppsw_t* super, int *catnum)
return cat;
}
+static void
+ppsw_free_items(ppsitem* item)
+{
+ if (!item)
+ return;
+
+ ppsw_free_items(item->next);
+ free(item->ppsurl);
+ free(item->format);
+ free(item);
+}
+
+static ppsitem*
+ppsw_read_a_item(ppsw_packet_t* p)
+{
+ ppsitem* item;
+ uint32_t val;
+
+ item = malloc(sizeof(*item));
+ item->next = NULL;
+ if (!item) {
+ ppsw_packet_fini(p);
+ return NULL;
+ }
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto error;
+ item->id = val;
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto error;
+ item->index = val;
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto error;
+ item->size = val;
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto error;
+ item->duration = val;
+
+ if (ppsw_packet_read_str(p, &item->format, NULL) < 0)
+ goto error;
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto error;
+ item->bitrate = val;
+
+ if (ppsw_packet_read_str(p, &item->ppsurl, NULL) < 0)
+ goto read_url_error;
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto read_vip_flag;
+ item->vipflag = val;
+
+ return item;
+ read_vip_flag:
+ free(item->ppsurl);
+ read_url_error:
+ free(item->format);
+ error:
+ free (item);
+ return NULL;
+}
+
+static ppsitem*
+ppsw_read_items(ppsw_packet_t* p, int itemnum)
+{
+ ppsitem* item, *head, *last;
+
+ last = head = NULL;
+ for (; itemnum; itemnum--) {
+ item = ppsw_read_a_item(p);
+ if (!item) {
+ ppsw_packet_fini(p);
+ ppsw_free_items(head);
+ return NULL;
+ }
+
+ if (!head)
+ head = item;
+ else if (last)
+ last->next = item;
+ last = item;
+ }
+
+ return item;
+}
+
+static void
+ppsw_free_channel(ppschannel* ch)
+{
+ if (!ch)
+ return;
+
+ ppsw_free_items(ch->pitems);
+ ppsw_free_channel(ch->next);
+ free(ch->name);
+ free(ch->director);
+ free(ch->actor);
+ free(ch->area);
+ free(ch->pubtime);
+ free(ch->lang);
+ free(ch->desc);
+ free(ch->BImgUrl);
+ free(ch->SImgUrl);
+ free(ch);
+}
+
+static ppschannel*
+ppsw_read_a_channel(ppsw_packet_t* p)
+{
+ ppschannel* ch;
+ uint32_t val;
+
+ ch = calloc(sizeof(*ch), 1);
+ if (!ch) {
+ ppsw_packet_fini(p);
+ return NULL;
+
+ }
+ if (ppsw_packet_read_str(p, &ch->name, NULL) < 0)
+ goto error;
+ if (ppsw_packet_read_str(p, &ch->director, NULL) < 0)
+ goto error;
+ if (ppsw_packet_read_str(p, &ch->actor, NULL) < 0)
+ goto error;
+ if (ppsw_packet_read_str(p, &ch->area, NULL) < 0)
+ goto error;
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto error;
+ ch->size = val;
+
+ if (ppsw_packet_read_str(p, &ch->pubtime, NULL) < 0)
+ goto error;
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto error;
+ ch->duration = val;
+
+ if (ppsw_packet_read_str(p, &ch->lang, NULL) < 0)
+ goto error;
+ if (ppsw_packet_read_str(p, &ch->desc, NULL) < 0)
+ goto error;
+ if (ppsw_packet_read_str(p, &ch->BImgUrl, NULL) < 0)
+ goto error;
+ if (ppsw_packet_read_str(p, &ch->SImgUrl, NULL) < 0)
+ goto error;
+
+ if (ppsw_packet_readl(p, &val) < 0)
+ goto error;
+ ch->itemnum = val;
+
+ if (ch->itemnum) {
+ ch->pitems = ppsw_read_items(p, ch->itemnum);
+ if (!ch->pitems)
+ goto error;
+ }
+ return ch;
+ error:
+ ppsw_free_channel(ch);
+ return NULL;
+}
+
+static ppschannel*
+ppsw_read_channel(ppsw_packet_t* p, int chnum)
+{
+ ppschannel* ch, *head, *last;
+ int i;
+
+ head = last = NULL;
+ for (i = 0; i < chnum; i++) {
+ ch = ppsw_read_a_channel(p);
+ if (!ch) {
+ ppsw_free_channel(head);
+ return NULL;
+ }
+ if (!head)
+ head = ch;
+ else if (last)
+ last->next = ch;
+ last = ch;
+ }
+
+ return 0;
+}
+
ppschannel* ppsw_client_send_vodlist_getchannel(ppsw_t* super, int catid, int subcatid,
int page_size, int page_num)
{
ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_msg_t msg;
ppsw_packet_t p;
+ ppschannel* ch;
+ uint32_t val;
if (ppsw_packet_init(&p, PPSW_VODLIST_GET_CHANNEL, 4 * 4) < 0)
return NULL;
@@ -865,13 +1057,26 @@ ppschannel* ppsw_client_send_vodlist_getchannel(ppsw_t* super, int catid, int su
return NULL;
}
+ if (ppsw_packet_readl(&p, &val) < 0)
+ return NULL;
+
+ ch = NULL;
+ if (val) {
+ ch = ppsw_read_channel(&p, val);
+ if (!ch)
+ return NULL;
+ }
+
+ ppsw_free_channel(self->channel);
+ self->channel = ch;
+
ppsw_packet_fini(&p);
- return NULL;
+ return ch;
}
int ppsw_client_send_get_account_type(ppsw_t* super)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
@@ -890,7 +1095,7 @@ int ppsw_client_send_get_account_type(ppsw_t* super)
int ppsw_client_send_get_vip_expire_time(ppsw_t* super, char* time)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_msg_t msg;
ppsw_packet_t p;
char* expire_time;
@@ -923,14 +1128,14 @@ int ppsw_client_send_get_vip_expire_time(ppsw_t* super, char* time)
int ppsw_client_send_charge(ppsw_t* super, const char* password)
{
- ppsw_client_t *self = (ppsw_client_t*)super;
+ //ppsw_client_t *self = (ppsw_client_t*)super;
ppsw_reply_msg_t msg;
ppsw_packet_t p;
if (ppsw_packet_init(&p, PPSW_CHARGE,
ppsw_strlen(password) + 2) < 0)
return -1;
- if (ppsw_write_str(&p, password, -1) < 0)
+ if (ppsw_packet_write_str(&p, password, -1) < 0)
return -1;
if (ppsw_send_packet(super, &p) < 0)
return -1;
diff --git a/wrapper/ppswrapper-common.c b/wrapper/ppswrapper-common.c
index b585094..09e8123 100644
--- a/wrapper/ppswrapper-common.c
+++ b/wrapper/ppswrapper-common.c
@@ -239,7 +239,7 @@ ppsw_read_str(ppsw_t* self,
if (!val)
return -1;
- ret = ppsw_read(self, val, len);
+ ret = ppsw_read(self, (uint8_t*)val, len);
if (ret != len) {
free (val);
return -1;
@@ -264,7 +264,7 @@ ppsw_write_str(ppsw_t* self,
return -1;
if (!len)
return 2;
- ret = ppsw_write (self, retval, len);
+ ret = ppsw_write (self, (const uint8_t*)retval, len);
if (ret != len)
return -1;
return 2 + len;
@@ -293,7 +293,7 @@ ppsw_read_msg(ppsw_t* self,
perror("read message seqno error");
return -1;
}
- if (ppsw_reads(self, &msg->len) < 0) {
+ if (ppsw_readl(self, &msg->len) < 0) {
perror("read message length error");
return -1;
}
@@ -501,6 +501,7 @@ ppsw_packet_readb(ppsw_packet_t* self,
if (ret != 1) {
perror("read error");
ppsw_packet_fini(self);
+ errno = ENOSPC;
return -1;
}
@@ -527,10 +528,9 @@ ppsw_packet_read(ppsw_packet_t* self,
uint8_t* retval,
uint16_t len)
{
- int ret;
-
if (self->len - self->offset < len) {
ppsw_packet_fini(self);
+ errno = ENOSPC;
return -1;
}
@@ -544,8 +544,6 @@ ppsw_packet_write(ppsw_packet_t* self,
const uint8_t* val,
uint16_t len)
{
- int ret;
-
if (self->len - self->offset < len) {
ppsw_packet_fini(self);
return -1;
@@ -580,7 +578,7 @@ ppsw_packet_read_str(ppsw_packet_t* self,
return -1;
}
- ret = ppsw_packet_read(self, val, len);
+ ret = ppsw_packet_read(self, (uint8_t*)val, len);
if (ret != len) {
free (val);
return -1;
@@ -605,7 +603,7 @@ ppsw_packet_write_str(ppsw_packet_t* self,
return -1;
if (!len)
return 2;
- ret = ppsw_packet_write (self, retval, len);
+ ret = ppsw_packet_write (self, (const uint8_t*)retval, len);
if (ret < 0)
return -1;
return 2 + len;
@@ -614,8 +612,11 @@ ppsw_packet_write_str(ppsw_packet_t* self,
int
ppsw_packet_init(ppsw_packet_t* p,
uint16_t id,
- uint16_t len)
+ uint32_t len)
{
+ if (len > 0xffffff)
+ return -1;
+
p->offset = 0;
p->len = PPSW_MSG_HEADER_LEN + len;
if (PPSW_MSG_HEADER_LEN + len < 64)
@@ -629,7 +630,7 @@ ppsw_packet_init(ppsw_packet_t* p,
ppsw_packet_writes(p, id);
/* skip seqno */
p->offset += 2;
- ppsw_packet_writes(p, len);
+ ppsw_packet_writel(p, len);
return 0;
}
diff --git a/wrapper/ppswrapper-server.c b/wrapper/ppswrapper-server.c
index b803d2f..fde3ad4 100644
--- a/wrapper/ppswrapper-server.c
+++ b/wrapper/ppswrapper-server.c
@@ -140,7 +140,7 @@ ppsw_get_event_buf(ppsw_server_t* self,
return buf;
}
-static ppsw_event_buf_t*
+static void
ppsw_remove_event_buf(ppsw_server_t* self,
int index)
{
@@ -252,7 +252,6 @@ send_dir_reply(ppsw_server_t* self,
char* dir)
{
int len;
- int ret;
ppsw_packet_t p;
if (dir)
@@ -295,7 +294,7 @@ send_read_reply(ppsw_server_t* self,
goto done;
if (buffer && retval > 0)
- ret = ppsw_packet_write(&p, buffer, length);
+ ret = ppsw_packet_write(&p, (uint8_t*)buffer, length);
else
ret = 0;
@@ -312,7 +311,6 @@ send_event_reply(ppsw_server_t* self,
int index, pps_event* event)
{
int len;
- int ret = -1;
ppsw_packet_t p;
//printf ("reply event: index %d id: %d\n", index, event ? event->id : -1);
@@ -334,7 +332,7 @@ send_event_reply(ppsw_server_t* self,
return -1;
if (ppsw_packet_writel(&p, event->lparam) < 0)
return -1;
- if (ppsw_packet_write(&p, event->extra, PPS_EXTRA_MSG_LEN) < 0)
+ if (ppsw_packet_write(&p, (uint8_t*)event->extra, PPS_EXTRA_MSG_LEN) < 0)
return -1;
}
@@ -344,7 +342,7 @@ send_event_reply(ppsw_server_t* self,
static size_t
ppsw_cal_single_category_size(ppscategory* cat)
{
- return 4 + 2 + ppsw_strlen(cat->name) + 4 + 4;
+ return 4 + 2 + ppsw_strlen(cat->name) + 4 + 4 + 4;
}
static size_t
@@ -370,9 +368,10 @@ ppsw_write_single_category(ppsw_packet_t* p, ppscategory* cat)
return -1;
if (ppsw_packet_writel(p, cat->type) < 0)
return -1;
- if (ppsw_packet_writel(p, cat->psubcat ? cat->subcatnum : 0) < 0)
+ if (ppsw_packet_writel(p, cat->subcatnum) < 0)
+ return -1;
+ if (ppsw_packet_writel(p, cat->psubcat ? 1 : 0) < 0)
return -1;
-
return 0;
}
@@ -432,22 +431,22 @@ ppsw_cal_item_size(ppsitem* item)
static size_t
ppsw_cal_channel_size(ppschannel* ch)
{
- int i;
size_t size = 0;
for (; ch; ch = ch->next) {
+ size += 2 * 9 + 3 * 4;
+ size += ppsw_strlen(ch->name);
+ size += ppsw_strlen(ch->director);
+ size += ppsw_strlen(ch->actor);
+ size += ppsw_strlen(ch->area);
+ size += ppsw_strlen(ch->pubtime);
+ size += ppsw_strlen(ch->lang);
+ size += ppsw_strlen(ch->desc);
+ size += ppsw_strlen(ch->BImgUrl);
+ size += ppsw_strlen(ch->SImgUrl);
+
if (ch->pitems && ch->itemnum)
size += ppsw_cal_item_size(ch->pitems);
- size += 2 * 9 + 3 * 4;
- size + ppsw_strlen(ch->name);
- size + ppsw_strlen(ch->director);
- size + ppsw_strlen(ch->actor);
- size + ppsw_strlen(ch->area);
- size + ppsw_strlen(ch->pubtime);
- size + ppsw_strlen(ch->lang);
- size + ppsw_strlen(ch->desc);
- size + ppsw_strlen(ch->BImgUrl);
- size + ppsw_strlen(ch->SImgUrl);
}
return size;
}
@@ -480,8 +479,6 @@ ppsw_write_items(ppsw_packet_t* p, ppsitem* item)
static int
ppsw_write_channel(ppsw_packet_t* p, ppschannel* ch)
{
- int i;
-
for (; ch; ch = ch->next) {
if (ppsw_packet_write_str(p, ch->name, -1) < 0)
return -1;
@@ -519,20 +516,28 @@ send_channel_reply(ppsw_server_t* self,
ppschannel* ch)
{
int len;
- int ret = -1;
+ int numch;
ppsw_packet_t p;
+ ppschannel* tmp = ch;
if (ch)
- len = ppsw_cal_channel_size(ch);
+ len = 4 + ppsw_cal_channel_size(ch);
else
- len = 0;
+ len = 4;
if (ppsw_packet_init(&p, PPSW_REPLY_GET_CHANNEL, len) < 0)
return -1;
+ for (numch = 0; tmp; tmp = tmp->next)
+ numch++;
+ if (ppsw_packet_writel(&p, numch) < 0)
+ return -1;
+
+ printf ("ch:%p numch: %d size: %d\n", ch, numch, len);
if (ch && ppsw_write_channel(&p, ch) < 0)
return -1;
+ printf ("here\n");
return ppsw_reply_packet(&self->base, &p);
}
@@ -541,7 +546,6 @@ send_expire_time_reply(ppsw_server_t* self,
char* buffer, int retval)
{
int len;
- int ret = -1;
ppsw_packet_t p;
//printf ("read length: %d\n", length);
@@ -638,7 +642,6 @@ process_remove_item(ppsw_server_t* self,
{
int ret;
uint32_t fd;
- ppsvod_iteminfo * info;
if (msg->len != 4)
return send_reply(self, -1);
@@ -661,7 +664,6 @@ process_play_item(ppsw_server_t* self,
ppsw_packet_t* p)
{
char *valid_code;
- uint16_t len;
uint32_t fd;
int ret;
@@ -739,7 +741,6 @@ process_drop_read(ppsw_server_t* self,
const ppsw_msg_t* msg,
ppsw_packet_t* p)
{
- int ret;
uint32_t fd;
if (msg->len != 4)
@@ -769,7 +770,7 @@ process_seek(ppsw_server_t* self,
if (ppsw_packet_readl(p, &pos) < 0)
return send_reply(self, -1);
- printf ("seek_item(%d)\n", fd, pos);
+ printf ("seek_item(%d, %d)\n", fd, pos);
ret = ppsvod_seek(fd, pos);
return send_reply(self, ret);
@@ -798,7 +799,6 @@ process_get_item_info(ppsw_server_t* self,
const ppsw_msg_t* msg,
ppsw_packet_t* p)
{
- int ret;
uint32_t fd;
ppsvod_iteminfo * info;
@@ -819,7 +819,6 @@ process_get_event(ppsw_server_t* self,
const ppsw_msg_t* msg,
ppsw_packet_t* p)
{
- uint32_t fd;
int index;
pps_event event;
@@ -890,7 +889,6 @@ process_vod_list_get_cat(ppsw_server_t* self,
const ppsw_msg_t* msg,
ppsw_packet_t* p)
{
- int ret;
int catnum = 0;
ppscategory* cat;
@@ -904,8 +902,6 @@ process_get_account_type(ppsw_server_t* self,
ppsw_packet_t* p)
{
int ret;
- int catnum;
- ppscategory* cat;
ret = ppsvod_get_account_type ();
return send_reply (self, ret);
@@ -944,7 +940,6 @@ process_vod_list_get_channel(ppsw_server_t* self,
const ppsw_msg_t* msg,
ppsw_packet_t* p)
{
- int ret;
uint32_t catid;
uint32_t subcatid;
uint32_t page_size;
@@ -953,6 +948,12 @@ process_vod_list_get_channel(ppsw_server_t* self,
if (ppsw_packet_readl(p, &catid) < 0)
return send_channel_reply (self, NULL);
+ if (ppsw_packet_readl(p, &subcatid) < 0)
+ return send_channel_reply (self, NULL);
+ if (ppsw_packet_readl(p, &page_size) < 0)
+ return send_channel_reply (self, NULL);
+ if (ppsw_packet_readl(p, &page_num) < 0)
+ return send_channel_reply (self, NULL);
ch = pps_vodlist_getchannel(catid, subcatid, page_size, page_num);
return send_channel_reply (self, ch);
}
@@ -1023,7 +1024,6 @@ ppsw_server_run(ppsw_t* super, int infinit)
self->done = 0;
while (!self->done) {
- struct timeval time;
struct linger linger;
int done = 0;