Compare commits
7 commits
transport_
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
550aa82162 | ||
![]() |
52a967db1f | ||
![]() |
bff3552911 | ||
![]() |
c0fc353932 | ||
![]() |
bc114cca64 | ||
![]() |
4781a2f25d | ||
![]() |
5ee449d30e |
2 changed files with 13 additions and 91 deletions
|
@ -28,9 +28,18 @@ int sml_number_endian();
|
|||
void sml_number_byte_swap(unsigned char *bytes, int bytes_len);
|
||||
|
||||
void *sml_number_init(u64 number, unsigned char type, int size) {
|
||||
|
||||
unsigned char* bytes = (unsigned char*)&number;
|
||||
|
||||
// Swap bytes of big-endian number so that
|
||||
// memcpy copies the right part
|
||||
if (sml_number_endian() == SML_BIG_ENDIAN) {
|
||||
bytes += sizeof(u64) - size;
|
||||
}
|
||||
|
||||
unsigned char *np = malloc(size);
|
||||
memset(np, 0, size);
|
||||
memcpy(np, &number, size);
|
||||
memcpy(np, bytes, size);
|
||||
return np;
|
||||
}
|
||||
|
||||
|
|
|
@ -92,104 +92,17 @@ size_t sml_transport_read(int fd, unsigned char *buffer, size_t max_len) {
|
|||
}
|
||||
else {
|
||||
// dont read other escaped sequences yet
|
||||
printf("error: unrecognized sequence");
|
||||
return -1;
|
||||
printf("error: unrecognized sequence\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
len += 4;
|
||||
|
||||
}
|
||||
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
size_t sml_transport_read(int fd, unsigned char *buffer, size_t max_len) {
|
||||
fd_set readfds;
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd, &readfds);
|
||||
|
||||
unsigned char byte;
|
||||
unsigned char buf[max_len];
|
||||
int esc = 0, start = 0, i = 0, end = 0, r;
|
||||
|
||||
while (i < max_len) {
|
||||
select(fd + 1, &readfds, 0, 0, 0);
|
||||
if (FD_ISSET(fd, &readfds)) {
|
||||
|
||||
if (!i) { // read until escaped start sequence;
|
||||
r = read(fd, &byte, 1);
|
||||
if (r <= 0) continue;
|
||||
|
||||
if (esc == 4) {
|
||||
if (byte == 0x01) {
|
||||
buf[esc + start++] = byte;
|
||||
if (start == 4) {
|
||||
i = esc + start;
|
||||
esc = 0;
|
||||
start = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// no start sequence
|
||||
esc = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (byte == 0x1b) {
|
||||
buf[esc++] = byte;
|
||||
}
|
||||
else {
|
||||
// no escape sequence
|
||||
esc = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // read the message
|
||||
r = read(fd, (void *)(&(buf[i])), 1);
|
||||
if (r <= 0) continue;
|
||||
|
||||
if (esc == 4) {
|
||||
if (end) {
|
||||
end++;
|
||||
if (end == 4) {
|
||||
memcpy(buffer, &(buf[0]), ++i);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (buf[i] == 0x1a) {
|
||||
end++;
|
||||
}
|
||||
else {
|
||||
// dont read other escaped sequences yet
|
||||
printf("error: unrecognized sequence");
|
||||
esc = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (buf[i] == 0x1b) {
|
||||
esc++;
|
||||
}
|
||||
else {
|
||||
esc = 0;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
void sml_transport_listen(int fd, void (*sml_transport_receiver)(unsigned char *buffer, size_t buffer_len)) {
|
||||
unsigned char buffer[MC_SML_BUFFER_LEN];
|
||||
size_t bytes;
|
||||
|
|
Loading…
Add table
Reference in a new issue