diff --git a/src/server/mysql.c b/src/server/mysql.c --- a/src/server/mysql.c +++ b/src/server/mysql.c @@ -30,40 +30,94 @@ #include #include -MYSQL mysqlConnect(){ - MYSQL *conn; +/** + local types + */ + +#define SEVENTY_FIVE 75 + +struct distrend_mysql_con +{ + MYSQL *mysqlconn; + short pointlesscheck; +}; + +struct distrend_mysql_result +{ + MYSQL_RES *result; +}; + +/** + funcs + */ + +int mysqlConnect(struct distrend_mysql_con **conn) +{ + MYSQL *mysqlconn; char *server = "zserver1"; char *user = "distren"; char *password = "secretpassword"; char *database = "distren"; - conn = mysql_init(NULL); - mysql_options(conn, MYSQL_OPT_RECONNECT,"true"); + mysqlconn = mysql_init(NULL); + mysql_options(mysqlconn, MYSQL_OPT_RECONNECT,"true"); - if(!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) - fprintf(stderr, "%s\n", mysql_error(conn)); + if(!mysql_real_connect(mysqlconn, server, user, password, database, 0, NULL, 0)) + { + fprintf(stderr, "%s\n", mysql_error(mysqlconn)); + return 1; + } - return *conn; + *conn = malloc(sizeof(struct distrend_mysql_con)); + (*conn)->mysqlconn = mysqlconn; + (*conn)->pointlesscheck = SEVENTY_FIVE; + + return 0; } -MYSQL_RES mysqlQuery(MYSQL *conn, char *query){ - if (mysql_query(conn, query)) - fprintf(stderr, "%s\n", mysql_error(conn)); - - MYSQL_RES *result; - result = mysql_use_result(conn); - return *result; -} +int mysqlDisconnect(distrend_mysql_con_t conn) +{ + /** + check if this handle is valid + */ + if(conn->pointlesscheck != SEVENTY_FIVE) + fprintf(stderr, "warning, I was passed a bad struct distrend_mysql_con...\n"); -// Check if connection is alive, reconnect if broken. -int mysqlPing(MYSQL *conn){ - if(mysql_ping(conn)){ - fprintf(stderr, "MySQL Connection broken, attempting reconnection..."); - return 1; - } - else - return 0; // Connection is still alive + /** + invalidate handle :-D + */ + conn->pointlesscheck ++; + + mysql_close(conn->mysqlconn); + free(conn); + + return 0; } +distrend_mysql_result_t mysqlQuery(distrend_mysql_con_t conn, char *query) +{ + MYSQL_RES *result; + distrend_mysql_result_t distrenresult; + + /** + pointless sanity check + */ + if(conn->pointlesscheck != SEVENTY_FIVE) + fprintf(stderr, "warning, I was passed a bad struct distrend_mysql_con...\n"); + + /** make sure that connection is still alive + */ + if(mysql_ping(conn->mysqlconn)) + fprintf(stderr, "MySQL Connection _was_ broken or may be broken, I'm not sure exactly what this return value means\n"); + + if (mysql_query(conn->mysqlconn, query)) + fprintf(stderr, "%s\n", mysql_error(conn->mysqlconn)); + + result = mysql_use_result(conn->mysqlconn); + + distrenresult = malloc(sizeof(struct distrend_mysql_result)); + return distrenresult; +} +