ELinks 0.16.1.1
gopher.c File Reference
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include "elinks.h"
#include "cache/cache.h"
#include "intl/libintl.h"
#include "main/module.h"
#include "network/connection.h"
#include "network/socket.h"
#include "protocol/common.h"
#include "protocol/gopher/gopher.h"
#include "protocol/protocol.h"
#include "protocol/uri.h"
#include "util/conv.h"
#include "util/memory.h"
#include "util/string.h"
Include dependency graph for gopher.c:

Data Structures

struct  gopher_entity_info
struct  gopher_connection_info

Macros

#define DEFAULT_GOPHER_ENTITY   GOPHER_DIRECTORY
#define entity_needs_gopher_access(entity)

Typedefs

typedef char gopher_entity_T

Enumerations

enum  gopher_entity {
  GOPHER_UNKNOWN = 0 , GOPHER_FILE = '0' , GOPHER_DIRECTORY = '1' , GOPHER_CSO = '2' ,
  GOPHER_ERROR = '3' , GOPHER_MACBINHEX = '4' , GOPHER_PCBINARY = '5' , GOPHER_UUENCODED = '6' ,
  GOPHER_INDEX = '7' , GOPHER_TELNET = '8' , GOPHER_BINARY = '9' , GOPHER_GIF = 'g' ,
  GOPHER_HTML = 'h' , GOPHER_CHTML = 'H' , GOPHER_MIME = 'm' , GOPHER_SOUND = 's' ,
  GOPHER_WWW = 'w' , GOPHER_IMAGE = 'I' , GOPHER_TN3270 = 'T' , GOPHER_INFO = 'i' ,
  GOPHER_DUPLICATE = '+' , GOPHER_PLUS_IMAGE = ':' , GOPHER_PLUS_MOVIE = ';' , GOPHER_PLUS_SOUND = '<' ,
  GOPHER_PLUS_PDF = 'P'
}

Functions

static struct gopher_entity_infoget_gopher_entity_info (gopher_entity_T type)
static const char * get_gopher_entity_description (gopher_entity_T type)
static void add_uri_decoded (struct string *command, char *string, int length, int replace_plus)
static struct connection_state init_gopher_index_cache_entry (struct connection *conn)
static struct connection_state add_gopher_command (struct connection *conn, struct string *command, gopher_entity_T entity, char *selector, int selectorlen)
static struct connection_state init_gopher_connection_info (struct connection *conn)
static void add_gopher_link (struct string *buffer, const char *text, const char *addr)
static void add_gopher_search_field (struct string *buffer, const char *text, const char *addr)
static void add_gopher_description (struct string *buffer, gopher_entity_T entity)
static void encode_selector_string (struct string *buffer, char *selector)
static void add_gopher_menu_line (struct string *buffer, char *line)
static char * get_gopher_line_end (char *data, int datalen)
static char * check_gopher_last_line (char *line, char *end)
static struct connection_state read_gopher_directory_data (struct connection *conn, struct read_buffer *rb)
static struct cache_entryinit_gopher_cache_entry (struct connection *conn)
static void read_gopher_response_data (struct socket *socket, struct read_buffer *rb)
static void send_gopher_command (struct socket *socket)
void gopher_protocol_handler (struct connection *conn)

Variables

struct module gopher_protocol_module
static struct gopher_entity_info gopher_entity_info []

Macro Definition Documentation

◆ DEFAULT_GOPHER_ENTITY

#define DEFAULT_GOPHER_ENTITY   GOPHER_DIRECTORY

◆ entity_needs_gopher_access

#define entity_needs_gopher_access ( entity)
Value:
((entity) != GOPHER_TELNET \
&& (entity) != GOPHER_TN3270 \
&& (entity) != GOPHER_WWW)
@ GOPHER_TELNET
Definition gopher.c:73
@ GOPHER_WWW
Definition gopher.c:80
@ GOPHER_TN3270
Definition gopher.c:82

Typedef Documentation

◆ gopher_entity_T

typedef char gopher_entity_T

Enumeration Type Documentation

◆ gopher_entity

Enumerator
GOPHER_UNKNOWN 
GOPHER_FILE 
GOPHER_DIRECTORY 
GOPHER_CSO 
GOPHER_ERROR 
GOPHER_MACBINHEX 
GOPHER_PCBINARY 
GOPHER_UUENCODED 
GOPHER_INDEX 
GOPHER_TELNET 
GOPHER_BINARY 
GOPHER_GIF 
GOPHER_HTML 
GOPHER_CHTML 
GOPHER_MIME 
GOPHER_SOUND 
GOPHER_WWW 
GOPHER_IMAGE 
GOPHER_TN3270 
GOPHER_INFO 
GOPHER_DUPLICATE 
GOPHER_PLUS_IMAGE 
GOPHER_PLUS_MOVIE 
GOPHER_PLUS_SOUND 
GOPHER_PLUS_PDF 

Function Documentation

◆ add_gopher_command()

struct connection_state add_gopher_command ( struct connection * conn,
struct string * command,
gopher_entity_T entity,
char * selector,
int selectorlen )
static

◆ add_gopher_description()

void add_gopher_description ( struct string * buffer,
gopher_entity_T entity )
static

◆ add_gopher_link()

void add_gopher_link ( struct string * buffer,
const char * text,
const char * addr )
static

◆ add_gopher_menu_line()

void add_gopher_menu_line ( struct string * buffer,
char * line )
static

◆ add_gopher_search_field()

void add_gopher_search_field ( struct string * buffer,
const char * text,
const char * addr )
static

◆ add_uri_decoded()

void add_uri_decoded ( struct string * command,
char * string,
int length,
int replace_plus )
static

◆ check_gopher_last_line()

char * check_gopher_last_line ( char * line,
char * end )
inlinestatic

◆ encode_selector_string()

void encode_selector_string ( struct string * buffer,
char * selector )
static

◆ get_gopher_entity_description()

const char * get_gopher_entity_description ( gopher_entity_T type)
static

◆ get_gopher_entity_info()

struct gopher_entity_info * get_gopher_entity_info ( gopher_entity_T type)
static

◆ get_gopher_line_end()

char * get_gopher_line_end ( char * data,
int datalen )
static

◆ gopher_protocol_handler()

void gopher_protocol_handler ( struct connection * conn)

◆ init_gopher_cache_entry()

struct cache_entry * init_gopher_cache_entry ( struct connection * conn)
static

◆ init_gopher_connection_info()

struct connection_state init_gopher_connection_info ( struct connection * conn)
static

◆ init_gopher_index_cache_entry()

struct connection_state init_gopher_index_cache_entry ( struct connection * conn)
static

◆ read_gopher_directory_data()

struct connection_state read_gopher_directory_data ( struct connection * conn,
struct read_buffer * rb )
static

◆ read_gopher_response_data()

void read_gopher_response_data ( struct socket * socket,
struct read_buffer * rb )
static

◆ send_gopher_command()

void send_gopher_command ( struct socket * socket)
static

Variable Documentation

◆ gopher_entity_info

struct gopher_entity_info gopher_entity_info[]
static
Initial value:
= {
{ GOPHER_BINARY, " (BINARY)", NULL },
{ GOPHER_CHTML, " (CHTML)", "text/html" },
{ GOPHER_CSO, " (CSO)", "text/html" },
{ GOPHER_DIRECTORY, " (DIRECTORY)", "text/html" },
{ GOPHER_FILE, " (FILE)", NULL },
{ GOPHER_GIF, " (GIF IMAGE)", "image/gif" },
{ GOPHER_HTML, " (HTML)", "text/html" },
{ GOPHER_IMAGE, " (IMAGE)", NULL },
{ GOPHER_INDEX, " (INDEX)", "text/html" },
{ GOPHER_MACBINHEX, "(BINARY HEX)", "application/octet-stream" },
{ GOPHER_MIME, " (MIME)", "application/octet-stream" },
{ GOPHER_PCBINARY, " (PCBINARY)", "application/octet-stream" },
{ GOPHER_PLUS_IMAGE, " (IMAGE+)", NULL },
{ GOPHER_PLUS_MOVIE, " (MOVIE)", "video/mpeg" },
{ GOPHER_PLUS_PDF, " (PDF)", "application/pdf" },
{ GOPHER_PLUS_SOUND, " (SOUND+)", "audio/basic" },
{ GOPHER_SOUND, " (SOUND)", "audio/basic" },
{ GOPHER_TELNET, " (TELNET)", NULL },
{ GOPHER_TN3270, " (TN3270)", NULL },
{ GOPHER_UUENCODED, " (UUENCODED)", "application/octet-stream" },
{ GOPHER_WWW, "(W3 ADDRESS)", NULL },
{ GOPHER_INFO, " ", NULL },
{ GOPHER_UNKNOWN, " ", "application/octet-stream" },
}
#define NULL
Definition explodename.c:35
@ GOPHER_CHTML
Definition gopher.c:77
@ GOPHER_MACBINHEX
Definition gopher.c:69
@ GOPHER_HTML
Definition gopher.c:76
@ GOPHER_GIF
Definition gopher.c:75
@ GOPHER_UUENCODED
Definition gopher.c:71
@ GOPHER_CSO
Definition gopher.c:67
@ GOPHER_INFO
Definition gopher.c:83
@ GOPHER_SOUND
Definition gopher.c:79
@ GOPHER_PLUS_IMAGE
Definition gopher.c:85
@ GOPHER_MIME
Definition gopher.c:78
@ GOPHER_BINARY
Definition gopher.c:74
@ GOPHER_DIRECTORY
Definition gopher.c:66
@ GOPHER_PCBINARY
Definition gopher.c:70
@ GOPHER_UNKNOWN
Definition gopher.c:64
@ GOPHER_IMAGE
Definition gopher.c:81
@ GOPHER_PLUS_PDF
Definition gopher.c:88
@ GOPHER_FILE
Definition gopher.c:65
@ GOPHER_ERROR
Definition gopher.c:68
@ GOPHER_INDEX
Definition gopher.c:72
@ GOPHER_PLUS_MOVIE
Definition gopher.c:86
@ GOPHER_PLUS_SOUND
Definition gopher.c:87

◆ gopher_protocol_module

struct module gopher_protocol_module
Initial value:
N_("Gopher"),
)
#define N_(msg)
Definition libintl.h:25
#define struct_module(name, options, hooks, submods, data, init, done)
Definition module.h:44