Changeset 637 for Whitix/branches
- Timestamp:
- 06/24/08 14:01:44 (5 months ago)
- Files:
-
- 1 modified
-
Whitix/branches/network/net/inet/raw.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/branches/network/net/inet/raw.c
r622 r637 20 20 #include <error.h> 21 21 #include <init.h> 22 #include <malloc.h> 22 23 #include <net/network.h> 23 24 #include <net/tcp.h> … … 38 39 } 39 40 41 int RawAddPacket(struct SocketBuffer* sockBuff) 42 { 43 struct Socket* curr; 44 45 ListForEachEntry(curr, &rawSocketList, next) 46 { 47 struct SocketBuffer* copy=(struct SocketBuffer*)malloc(sizeof(struct SocketBuffer)+sockBuff->length); 48 memcpy(copy, sockBuff, sizeof(struct SocketBuffer)+sockBuff->length); 49 ListAddTail(©->next, &curr->recvPackets); 50 } 51 52 return 0; 53 } 54 40 55 int RawClose(struct Socket* socket) 41 56 { 57 ListRemove(&socket->next); 42 58 return 0; 43 59 } … … 54 70 return -ENOMEM; 55 71 56 if (!socket->device->ops || !socket->device->ops->send)57 return -ENOTIMPL; 72 return NetDeviceSend(socket->device, sockBuff); 73 } 58 74 59 return socket->device->ops->send(socket->device, sockBuff); 75 int RawReceive(struct Socket* socket, void* buffer, int length, int flags) 76 { 77 struct SocketBuffer* sockBuff; 78 79 while (ListEmpty(&socket->recvPackets)) 80 ThrSchedule(); 81 82 sockBuff=ListEntry(socket->recvPackets.next,struct SocketBuffer, next); 83 84 int toCopy=MIN(length, sockBuff->length); 85 86 memcpy((char*)buffer, sockBuff->data, toCopy); 87 88 SocketDestroyBuffer(sockBuff); 89 90 return toCopy; 60 91 } 61 92 … … 65 96 .close = RawClose, 66 97 .send = RawSend, 98 .receive = RawReceive, 67 99 }; 68 100 … … 71 103 InetRegisterOps(INET_PROTOCOL_RAW, &rawOps); 72 104 printf("RAW: Registered protocol.\n"); 105 return 0; 73 106 }