#include "server.h"
Go to the source code of this file.
Functions | |
void | Close (int fd) |
This function is used for closing a file. | |
void | close_properly (int signal) |
This function is called when we press Ctrl+C key or on any error condition. | |
ssize_t | Write (int fd, const void *buf, size_t count) |
This function is used for writing into the file/socket. | |
int | Socket (int domain, int type, int protocol) |
This function creates an unbound socket in a communications domain, and return a file descriptor that can be used in later function calls that operate on sockets. | |
void | Bind (int sockfd, const struct sockaddr *my_addr, socklen_t addrlen) |
This function shall assign a local socket address address to a socket identified by descriptor socket that has no local socket address assigned. | |
void | Listen (int sockfd, int backlog) |
This function shall mark a connection-mode socket, specified by the socket argument, as accepting connections. | |
int | Accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen) |
This function hall extract the first connection on the queue of pending connections, create a new socket with the same socket type protocol and address family as the specified socket, and allocate a new file descriptor for that socket. | |
ssize_t | Read (int fd, void *buf, size_t count) |
This function reads the data from file/socket into a buffer. | |
int | isNickExists (char *nick) |
This function checks if the client who is attempting to connect with a nick name already exists or not. | |
void | insert_row (char *query) |
This function inserts a row into a mysql database. | |
void | write_all (char *data) |
This function sends the message send by one client to all other connected clients. | |
void | add_widget_with_label (GtkContainer *box, gchar *caption, GtkWidget *widget) |
This function adds the widget to the Box with corresponding label passed. | |
void | end_program (GtkWidget *widget1, gpointer data) |
This function calls when we close the window. | |
void | onExit (GtkWidget *widget1, gpointer data) |
This function calls when we close the window. | |
void | mysql_connect_create_table () |
This function connects to the database and creates a table (if not present) for logging the chats of clients. | |
void | connect_server (GtkWidget *widget1, gpointer data) |
This function stars the server with the given port for listening.It is called when we press "Connect" button Widget. | |
void * | start_server (void *arg) |
This function starts the server. | |
int | main (int argc, char *argv[]) |
This is where program execution starts. |
It listens to the user specified port and accepts all client connections and then it would list all the messages being sent by the clients, log them into a database and list of all connected clients.
Definition in file server.c.
int Accept | ( | int | sockfd, | |
struct sockaddr * | addr, | |||
socklen_t * | addrlen | |||
) |
This function hall extract the first connection on the queue of pending connections, create a new socket with the same socket type protocol and address family as the specified socket, and allocate a new file descriptor for that socket.
sockfd | Specifies a socket that was created with socket(), has been bound to an address with bind(), and has issued a successful call to listen(). | |
addr | Either a null pointer, or a pointer to a sockaddr structure where the address of the connecting socket shall be returned. | |
addrlen | Points to a socklen_t structure which specifies the length of the supplied sockaddr structure. |
Definition at line 126 of file server.c.
Referenced by start_server().
void add_widget_with_label | ( | GtkContainer * | box, | |
gchar * | caption, | |||
GtkWidget * | widget | |||
) |
void Bind | ( | int | sockfd, | |
const struct sockaddr * | my_addr, | |||
socklen_t | addrlen | |||
) |
This function shall assign a local socket address address to a socket identified by descriptor socket that has no local socket address assigned.
sockfd | Specifies the file descriptor of the socket to be bound. | |
my_addr | Points to a sockaddr structure containing the address to be bound to the socket. | |
addrlen | Specifies the length of the sockaddr structure pointed to by the address argument. |
Definition at line 92 of file server.c.
References err_msg, and success.
Referenced by connect_server().
void Close | ( | int | fd | ) |
This function is used for closing a file.
It returns an error message if it cannot close the file/socket.
fd | file descriptor of the file/socket to be closed. |
Definition at line 16 of file server.c.
Referenced by close_properly(), end_program(), and start_server().
void close_properly | ( | int | signal | ) |
This function is called when we press Ctrl+C key or on any error condition.
It does proper closing of all file descriptors and database connections.
signal | (SIGINT) |
Definition at line 30 of file server.c.
References client, Close(), connection1, listen_file_descriptor, and maxi.
Referenced by insert_row(), and start_server().
void connect_server | ( | GtkWidget * | widget1, | |
gpointer | data | |||
) |
This function stars the server with the given port for listening.It is called when we press "Connect" button Widget.
It gives appropriate message if it cannot listen to the port.
widget1 | Connect button | |
data | pointer |
Definition at line 318 of file server.c.
References Bind(), entry_port, err_msg, Listen(), listen_file_descriptor, Socket(), and success.
Referenced by main().
void end_program | ( | GtkWidget * | widget1, | |
gpointer | data | |||
) |
This function calls when we close the window.
. which quits the window and exits the program. It shutdowns and closes all the connections.
widget1 | Widget to be closed | |
data | pointer |
Definition at line 257 of file server.c.
References client, Close(), connection1, listen_file_descriptor, and maxi.
Referenced by main().
void insert_row | ( | char * | query | ) |
This function inserts a row into a mysql database.
The row contains information like ID, timestamp, message of client, nickname of client, IP address of client. basically logging the chat into database.
query | insert query. |
Definition at line 184 of file server.c.
References close_properly(), and connection1.
Referenced by write_all().
int isNickExists | ( | char * | nick | ) |
This function checks if the client who is attempting to connect with a nick name already exists or not.
nick | nickname of client attempting to connect |
Definition at line 161 of file server.c.
Referenced by start_server().
void Listen | ( | int | sockfd, | |
int | backlog | |||
) |
This function shall mark a connection-mode socket, specified by the socket argument, as accepting connections.
sockfd | file descriptor on which it has to listen. | |
backlog | used to limit the number of outstanding connections in the socket's listen queue. |
Definition at line 107 of file server.c.
References err_msg, and success.
Referenced by connect_server().
int main | ( | int | argc, | |
char * | argv[] | |||
) |
This is where program execution starts.
All arguments are passed to gtk for processing, which removes any arguments relevant to it. All other arguments are ignored. This function first gets a window for user to enter listening port. If it can listen succesfully then it displays the chat room, else it displays the dialog box with approriate message.
argc | Number of arguments passed. | |
argv | NULL terminated array of command line arguments. |
Definition at line 568 of file server.c.
References add_widget_with_label(), buffer, connect_server(), end_program(), entry_port, iter, list_store, mysql_connect_create_table(), onExit(), and start_server().
void mysql_connect_create_table | ( | ) |
This function connects to the database and creates a table (if not present) for logging the chats of clients.
Definition at line 290 of file server.c.
References connection1.
Referenced by main().
void onExit | ( | GtkWidget * | widget1, | |
gpointer | data | |||
) |
ssize_t Read | ( | int | fd, | |
void * | buf, | |||
size_t | count | |||
) |
This function reads the data from file/socket into a buffer.
fd | file descriptor used for reading data | |
buf | buffer into which the data read from file is stored | |
count | Maximum number of bytes to be read |
Definition at line 145 of file server.c.
Referenced by start_server().
int Socket | ( | int | domain, | |
int | type, | |||
int | protocol | |||
) |
This function creates an unbound socket in a communications domain, and return a file descriptor that can be used in later function calls that operate on sockets.
domain | Specifies the communications domain in which a socket is to be created. | |
type | Specifies the type of socket to be created. | |
protocol | Specifies a particular protocol to be used with the socket. |
Definition at line 74 of file server.c.
References err_msg, and success.
Referenced by connect_server().
void* start_server | ( | void * | arg | ) |
This function starts the server.
It accepts the client connections and sends the client messages to all other connected clients, logs the chat into database and lists the connected clients.
arg | arguments to be sent |
Definition at line 354 of file server.c.
References Accept(), buffer, BUFFER, client, Close(), close_properly(), client_data::fd, client_data::ip, ip, isNickExists(), iter, list_store, listen_file_descriptor, maxi, client_data::nick, nick, Read(), t_iter, Write(), and write_all().
Referenced by main().
ssize_t Write | ( | int | fd, | |
const void * | buf, | |||
size_t | count | |||
) |
This function is used for writing into the file/socket.
It prints error message and returns the status if it fails to write.
fd | file descriptor of the file into which we write. | |
buf | pointer to the buffer which stores the data to be written. | |
count | number of bytes to be written. |
Definition at line 55 of file server.c.
Referenced by start_server(), and write_all().
void write_all | ( | char * | data | ) |
This function sends the message send by one client to all other connected clients.
data | message to be sent. |
Definition at line 201 of file server.c.
References buffer, BUFFER, client, insert_row(), ip, transmit_unit::ip, iter, maxi, transmit_unit::msg, nick, transmit_unit::nick, transmit_unit::time, and Write().
Referenced by start_server().