00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <lib/kmalloc.h>
00037 #include <ubixos/fork.h>
00038 #include <string.h>
00039
00040 #include "net/mem.h"
00041 #include "net/debug.h"
00042 #include "net/def.h"
00043 #include "net/api.h"
00044 #include "net/stats.h"
00045
00046 #include "lib/kprintf.h"
00047 char *buffer = 0x0;
00048
00049 #define ESUCCESS 0
00050 #define ESYNTAX -1
00051 #define ETOOFEW -2
00052 #define ETOOMANY -3
00053 #define ECLOSED -4
00054
00055 #define NCONNS 10
00056
00057
00058 static void sendstr(const char *str, struct netconn *conn) {
00059 netconn_write(conn, (void *)str, strlen(str), NETCONN_NOCOPY);
00060 }
00061
00062 static void prompt(struct netconn *conn) {
00063 sendstr("uBixCube:@sys> ", conn);
00064 }
00065
00066 static void shell_main(struct netconn *conn) {
00067 struct netbuf *buf = 0x0;
00068 uInt32 len;
00069
00070
00071 prompt(conn);
00072 while (1) {
00073 buf = netconn_recv(conn);
00074 if (buf != 0x0)
00075 netbuf_copy(buf,buffer,1024);
00076 len = netbuf_len(buf);
00077 netbuf_delete(buf);
00078 buffer[len-2] = '\0';
00079 kprintf("Buffer: [%s:%i]\n",buffer,len);
00080 if (!strcmp(buffer,"quit")) {
00081 netconn_close(conn);
00082 break;
00083 }
00084 else if (!strcmp(buffer,"ls")) {
00085 sendstr("no\nfiles\nhere\n", conn);
00086 }
00087 else if (!strcmp(buffer,"uname")) {
00088 sendstr("UbixOS v1.0 reddawg@devel.ubixos.com:/ubix.elf\n",conn);
00089 }
00090 prompt(conn);
00091 }
00092 }
00093
00094 static void shell_thread(void *arg) {
00095 struct netconn *conn = 0x0, *newconn = 0x0;
00096
00097 buffer = (char *)kmalloc(1024);
00098
00099 conn = netconn_new(NETCONN_TCP);
00100 netconn_bind(conn, NULL, 23);
00101 netconn_listen(conn);
00102
00103 while(1) {
00104 kprintf("1");
00105 newconn = netconn_accept(conn);
00106 kprintf("2");
00107 shell_main(newconn);
00108 kprintf("3");
00109
00110 kprintf("4");
00111 }
00112 }
00113
00114 void shell_init(void) {
00115 sys_thread_new(shell_thread, NULL);
00116 }
00117
00118
00119
00120
00121