rendered paste bodyint mssql_connect(void) {
int iRet = 0;
char sSQL[SQLCOMMAND_SIZE];
TDSCONNECTINFO *connection = NULL;
//-- attempt to allocate the variables
if (!(login = tds_alloc_login())) {
ast_log(LOG_ERROR, "tds_alloc_login() failed.\n");
return -1;
}
tds_set_server(login, dbhost);
tds_set_user(login, dbuser);
tds_set_passwd(login, dbpass);
tds_set_app(login, "TSQL");
tds_set_library(login, "TDS-Library");
tds_set_client_charset(login, dbcharset);
tds_set_language(login, dblanguage);
tds_set_packet(login, 512);
tds_set_version(login, 7, 0);
if (!(context = tds_alloc_context())) {
ast_log(LOG_ERROR, "tds_alloc_context() failed.\n");
//-- we need to escape here
goto connect_failed;
}
if (!(tds = tds_alloc_socket(context, 512))) {
ast_log(LOG_ERROR, "tds_alloc_socket() failed.\n");
//-- we need to escape here
goto connect_failed;
}
tds_set_parent(tds, NULL);
connection = tds_read_config_info(tds, login, context->locale);
if (!connection) {
ast_log(LOG_ERROR, "tds_read_config() failed.\n");
//-- we need to escape here
goto connect_failed;
}
if (tds_connect(tds, connection) == TDS_FAIL) {
ast_log(LOG_ERROR, "Failed to connect to MS SQL server.\n");
tds = NULL;
tds_free_connect(connection);
connection = NULL;
//-- we need to escape here
goto connect_failed;
}
tds_free_connect(connection);
connection = NULL;
//-- create the SQL command to switch databases and submit
sprintf(sSQL, "USE %s", dbname);
if ((tds_submit_query(tds, sSQL) != TDS_SUCCEED) || (tds_process_simple_query(tds) != TDS_SUCCEED)) {
ast_log(LOG_ERROR, "Could not change database (%s)\n", dbname);
//-- we need to escape here
goto connect_failed;
} else {
dbconnected = 1;
}
return dbconnected;
connect_failed:
mssql_disconnect();
return -1;
}