summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TOOLS/netstream/netstream.c10
-rw-r--r--libmpdemux/netstream.h14
-rw-r--r--libmpdemux/stream_netstream.c7
3 files changed, 24 insertions, 7 deletions
diff --git a/TOOLS/netstream/netstream.c b/TOOLS/netstream/netstream.c
index 6191f613d9..a79def31bf 100644
--- a/TOOLS/netstream/netstream.c
+++ b/TOOLS/netstream/netstream.c
@@ -36,6 +36,7 @@
#include <libmpdemux/stream.h>
#include <mp_msg.h>
+#include <bswap.h>
/// Netstream packets def and some helpers
#include <libmpdemux/netstream.h>
@@ -79,6 +80,7 @@ static int net_stream_open(client_t* cl,char* url) {
ret.sector_size = cl->stream->sector_size;
ret.start_pos = cl->stream->start_pos;
ret.end_pos = cl->stream->end_pos;
+ net_stream_opened_2_me(&ret);
if(!write_packet(cl->fd,NET_STREAM_OK,(char*)&ret,sizeof(mp_net_stream_opened_t)))
return 0;
@@ -102,8 +104,8 @@ static int net_stream_fill_buffer(client_t* cl,uint16_t max_len) {
pack = malloc(max_len + sizeof(mp_net_stream_packet_t));
pack->cmd = NET_STREAM_OK;
r = stream_read(cl->stream,pack->data,max_len);
- pack->len = r + sizeof(mp_net_stream_packet_t);
- if(!net_write(cl->fd,(char*)pack,pack->len)) {
+ pack->len = le2me_16(r + sizeof(mp_net_stream_packet_t));
+ if(!net_write(cl->fd,(char*)pack,le2me_16(pack->len))) {
free(pack);
return 0;
}
@@ -173,13 +175,13 @@ int handle_client(client_t* cl,mp_net_stream_packet_t* pack) {
mp_msg(MSGT_NETST,MSGL_WARN,"Got invalid fill buffer packet\n");
return 0;
}
- return net_stream_fill_buffer(cl,*((uint16_t*)pack->data));
+ return net_stream_fill_buffer(cl,le2me_16(*((uint16_t*)pack->data)));
case NET_STREAM_SEEK:
if(pack->len != sizeof(mp_net_stream_packet_t) + 8) {
mp_msg(MSGT_NETST,MSGL_WARN,"Got invalid fill buffer packet\n");
return 0;
}
- return net_stream_seek(cl,*((uint64_t*)pack->data));
+ return net_stream_seek(cl,le2me_64(*((uint64_t*)pack->data)));
case NET_STREAM_RESET:
return net_stream_reset(cl);
case NET_STREAM_CLOSE:
diff --git a/libmpdemux/netstream.h b/libmpdemux/netstream.h
index ade6ee4092..b505027b02 100644
--- a/libmpdemux/netstream.h
+++ b/libmpdemux/netstream.h
@@ -3,6 +3,8 @@
* Common stuff for netstream
* Packets and so on are defined here along with a few helpers
* wich are used by both the client and the server
+ *
+ * Data is always low endian
*/
typedef struct mp_net_stream_packet_st {
@@ -64,7 +66,8 @@ static mp_net_stream_packet_t* read_packet(int fd) {
free(pack);
return NULL;
}
-
+ pack->len = le2me_16(pack->len);
+
if(pack->len < sizeof(mp_net_stream_packet_t)) {
mp_msg(MSGT_NETST,MSGL_WARN,"Got invalid packet (too small: %d)\n",pack->len);
free(pack);
@@ -113,6 +116,7 @@ static int write_packet(int fd, uint8_t cmd,char* data,int len) {
pack->cmd = cmd;
// printf("Write packet %d %d (%p) %d\n",fd,cmd,data,len);
+ pack->len = le2me_16(pack->len);
if(net_write(fd,(char*)pack,pack->len)) {
free(pack);
return 1;
@@ -120,3 +124,11 @@ static int write_packet(int fd, uint8_t cmd,char* data,int len) {
free(pack);
return 0;
}
+
+static void net_stream_opened_2_me(mp_net_stream_opened_t* o) {
+ o->file_format = le2me_32(o->file_format);
+ o->flags = le2me_32(o->flags);
+ o->sector_size = le2me_32(o->sector_size);
+ o->start_pos = le2me_64(o->start_pos);
+ o->end_pos = le2me_64(o->end_pos);
+}
diff --git a/libmpdemux/stream_netstream.c b/libmpdemux/stream_netstream.c
index 1f21b5f6af..eb4888e89e 100644
--- a/libmpdemux/stream_netstream.c
+++ b/libmpdemux/stream_netstream.c
@@ -57,6 +57,7 @@
#include "help_mp.h"
#include "../m_option.h"
#include "../m_struct.h"
+#include "../bswap.h"
#include "netstream.h"
@@ -158,7 +159,7 @@ static mp_net_stream_packet_t* send_net_stream_cmd(stream_t *s,uint16_t cmd,char
}
static int fill_buffer(stream_t *s, char* buffer, int max_len){
- uint16_t len = max_len;
+ uint16_t len = le2me_16(max_len);
mp_net_stream_packet_t* pack;
pack = send_net_stream_cmd(s,NET_STREAM_FILL_BUFFER,(char*)&len,2);
@@ -179,7 +180,7 @@ static int fill_buffer(stream_t *s, char* buffer, int max_len){
static int seek(stream_t *s,off_t newpos) {
- uint64_t pos = (uint64_t)newpos;
+ uint64_t pos = le2me_64((uint64_t)newpos);
mp_net_stream_packet_t* pack;
pack = send_net_stream_cmd(s,NET_STREAM_SEEK,(char*)&pos,8);
@@ -259,6 +260,8 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
}
opened = (mp_net_stream_opened_t*)pack->data;
+ net_stream_opened_2_me(opened);
+
*file_format = opened->file_format;
stream->flags = opened->flags;
stream->sector_size = opened->sector_size;