-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
20 changed files
with
484 additions
and
430 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,201 @@ | ||
// | ||
// Created by cpasjuste on 17/05/17. | ||
// | ||
|
||
#ifdef PSP2 | ||
|
||
#include <psp2/net/net.h> | ||
#include <libk/stdio.h> | ||
#include <libk/string.h> | ||
#include <libk/stdlib.h> | ||
#include <libk/stdbool.h> | ||
#include <sys/types.h> | ||
|
||
#define send sceNetSend | ||
#define recv sceNetRecv | ||
|
||
#else | ||
|
||
#include <string.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <stdbool.h> | ||
#include <sys/socket.h> | ||
|
||
#endif | ||
|
||
#include "cmd_common.h" | ||
|
||
int p2s_cmd_receive(int sock, S_CMD *cmd) { | ||
|
||
char buffer[SIZE_CMD]; | ||
memset(buffer, 0, SIZE_CMD); | ||
|
||
ssize_t read = recv(sock, buffer, SIZE_CMD, 0); | ||
if (read < 2) { | ||
return read <= 0 ? P2S_ERR_SOCKET : P2S_ERR_INVALID_CMD; | ||
} | ||
|
||
bool is_cmd = p2s_string_to_cmd(cmd, buffer) == 0; | ||
if (!is_cmd) { | ||
return P2S_ERR_INVALID_CMD; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
int p2s_cmd_receive_resp(int sock) { | ||
|
||
char buffer[SIZE_CMD]; | ||
memset(buffer, 0, SIZE_CMD); | ||
|
||
ssize_t read = recv(sock, buffer, SIZE_CMD, 0); | ||
if (read < 2) { | ||
return -1; | ||
} | ||
|
||
S_CMD cmd; | ||
if (p2s_string_to_cmd(&cmd, buffer) != 0) { | ||
return -1; | ||
} | ||
|
||
if (cmd.type != CMD_OK) { | ||
return -1; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
size_t p2s_cmd_receive_buffer(int sock, void *buffer, size_t size) { | ||
|
||
ssize_t len; | ||
size_t left = size; | ||
|
||
while (left) { | ||
len = recv(sock, buffer, left, 0); | ||
if (len == 0) { | ||
size = 0; | ||
break; | ||
}; | ||
if (len == -1) { | ||
break; | ||
} else { | ||
left -= len; | ||
buffer += len; | ||
} | ||
} | ||
|
||
return size; | ||
} | ||
|
||
void p2s_cmd_send(int sock, int cmdType) { | ||
|
||
char buffer[4]; | ||
memset(buffer, 0, 4); | ||
snprintf(buffer, 4, "%i", cmdType); | ||
send(sock, buffer, strlen(buffer), 0); | ||
} | ||
|
||
void p2s_cmd_send_cmd(int sock, S_CMD *cmd) { | ||
|
||
char buffer[SIZE_CMD]; | ||
memset(buffer, 0, SIZE_CMD); | ||
|
||
if (p2s_cmd_to_string(buffer, cmd) == 0) { | ||
send(sock, buffer, strlen(buffer), 0); | ||
} | ||
} | ||
|
||
void p2s_cmd_send_fmt(int sock, const char *fmt, ...) { | ||
|
||
char buffer[SIZE_CMD]; | ||
memset(buffer, 0, SIZE_CMD); | ||
va_list args; | ||
va_start(args, fmt); | ||
vsnprintf(buffer, SIZE_CMD, fmt, args); | ||
va_end(args); | ||
|
||
send(sock, buffer, strlen(buffer), 0); | ||
} | ||
|
||
void p2s_cmd_send_string(int sock, int cmdType, const char *value) { | ||
|
||
char buffer[SIZE_PRINT + 6]; | ||
memset(buffer, 0, SIZE_PRINT + 6); | ||
snprintf(buffer, SIZE_PRINT + 6, "%i\"%s\"", cmdType, value); | ||
send(sock, buffer, strlen(buffer), 0); | ||
} | ||
|
||
void p2s_cmd_send_int(int sock, int cmdType, int value) { | ||
|
||
char buffer[16]; | ||
memset(buffer, 0, 16); | ||
snprintf(buffer, 16, "%i\"%i\"", cmdType, value); | ||
send(sock, buffer, strlen(buffer), 0); | ||
} | ||
|
||
void p2s_cmd_send_long(int sock, int cmdType, long value) { | ||
|
||
char buffer[32]; | ||
memset(buffer, 0, 32); | ||
snprintf(buffer, 32, "%i\"%ld\"", cmdType, value); | ||
send(sock, buffer, strlen(buffer), 0); | ||
} | ||
|
||
int p2s_cmd_to_string(char *buffer, S_CMD *cmd) { | ||
|
||
if (!buffer || !cmd) { | ||
return -1; | ||
} | ||
|
||
memset(buffer, 0, SIZE_CMD); | ||
sprintf(buffer, "%i", cmd->type); | ||
for (int i = 0; i < MAX_ARGS; i++) { | ||
snprintf(buffer + strlen(buffer), SIZE_CMD, "\"%s", cmd->args[i]); | ||
} | ||
strncat(buffer, "\"", SIZE_CMD); | ||
|
||
return 0; | ||
} | ||
|
||
int p2s_string_to_cmd(S_CMD *cmd, const char *buffer) { | ||
|
||
if (!cmd || !buffer) { | ||
return -1; | ||
} | ||
|
||
if (strlen(buffer) < 2) { | ||
return -1; | ||
} | ||
|
||
memset(cmd, 0, sizeof(S_CMD)); | ||
|
||
// type | ||
char tmp[2]; | ||
strncpy(tmp, buffer, 2); | ||
cmd->type = atoi(tmp); | ||
if (cmd->type < CMD_START) { | ||
cmd->type = 0; | ||
return -1; | ||
} | ||
|
||
const char *start, *end = buffer; | ||
|
||
for (int i = 0; i < MAX_ARGS; i++) { | ||
|
||
start = strstr(end, "\""); | ||
if (!start) { | ||
break; | ||
} | ||
start += 1; | ||
|
||
end = strstr(start, "\""); | ||
if (!end) { | ||
break; | ||
} | ||
|
||
strncpy(cmd->args[i], start, end - start); | ||
} | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#ifndef CMD_COMMON_H | ||
#define CMD_COMMON_H | ||
|
||
#define P2S_ERR_SOCKET 0x80000001 | ||
#define P2S_ERR_INVALID_CMD 0x80000002 | ||
|
||
#define SIZE_CHAR (256) | ||
#define SIZE_DATA (8 * 1024) | ||
#define SIZE_PRINT (512) | ||
|
||
#define MAX_ARGS (8) | ||
|
||
typedef struct S_CMD { | ||
int type; | ||
char args[MAX_ARGS][SIZE_PRINT]; | ||
} S_CMD; | ||
|
||
#define SIZE_CMD (sizeof(S_CMD) + 1024) | ||
|
||
enum cmd_t { | ||
CMD_START = 10, | ||
CMD_LS, | ||
CMD_CD, | ||
CMD_RM, | ||
CMD_RMDIR, | ||
CMD_MKDIR, | ||
CMD_MV, | ||
CMD_PWD, | ||
CMD_GET, | ||
CMD_PUT, | ||
CMD_LAUNCH, | ||
CMD_LOAD, | ||
CMD_RELOAD, | ||
CMD_TEST, | ||
CMD_MOUNT, | ||
CMD_UMOUNT, | ||
CMD_TITLE, | ||
CMD_OVADD, | ||
CMD_OVDEL, | ||
CMD_OVLS, | ||
CMD_FIOSCP, | ||
CMD_MODLS, | ||
CMD_MODLS_PID, | ||
CMD_MODINFO, | ||
CMD_MODINFO_PID, | ||
CMD_MODLOADSTART, | ||
CMD_MODLOADSTART_PID, | ||
CMD_MODSTOPUNLOAD, | ||
CMD_MODSTOPUNLOAD_PID, | ||
CMD_KMODLOADSTART, | ||
CMD_KMODSTOPUNLOAD, | ||
CMD_THLS, | ||
CMD_THPAUSE, | ||
CMD_THRESUME, | ||
CMD_MEMR, | ||
CMD_MEMW, | ||
CMD_RESET, | ||
CMD_REBOOT, | ||
CMD_EXIT, | ||
CMD_HELP, | ||
|
||
CMD_OK = 64, | ||
CMD_NOK = 65 | ||
}; | ||
|
||
int p2s_cmd_receive(int sock, S_CMD *cmd); | ||
|
||
size_t p2s_cmd_receive_buffer(int sock, void *buffer, size_t size); | ||
|
||
int p2s_cmd_receive_resp(int sock); | ||
|
||
void p2s_cmd_send(int sock, int cmdType); | ||
|
||
void p2s_cmd_send_cmd(int sock, S_CMD *cmd); | ||
|
||
void p2s_cmd_send_fmt(int sock, const char *fmt, ...); | ||
|
||
void p2s_cmd_send_string(int sock, int cmdType, const char *value); | ||
|
||
void p2s_cmd_send_strings(int sock, int cmdType, int argc, char *argv[]); | ||
|
||
void p2s_cmd_send_int(int sock, int cmdType, int value); | ||
|
||
void p2s_cmd_send_long(int sock, int cmdType, long value); | ||
|
||
int p2s_cmd_to_string(char *buffer, S_CMD *c); | ||
|
||
int p2s_string_to_cmd(S_CMD *c, const char *buffer); | ||
|
||
#endif |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.