Beispiel #1
0
static char *
osm_strip_html(const char *str)
{
	utf_string utf;
	utf.is_html = 1;
	utf.utfstring = (char *)str;

	return strip_html(&utf);	// util.c
}
Beispiel #2
0
static char *
geoniche_geostuff(const waypoint *wpt)
{
	char *gs = NULL, *tmp1, *tmp2, *tmp3;
	char tbuf[10240];

	if (!wpt->gc_data->terr) {
		return NULL;
	}

	snprintf(tbuf, sizeof(tbuf), "\n%s by %s\n\n", gs_get_cachetype(wpt->gc_data->type), wpt->gc_data->placer);
	gs = xstrappend(gs, tbuf);

/*
 * 3 May 06: Removed duplicated information
 *
 * 	snprintf(tbuf, sizeof(tbuf), "Waypoint: %s %s\n", wpt->shortname, wpt->description);	
 *	gs = xstrappend(gs, tbuf);
 */

/*
 * 3 May 06: Added container type
 */
	snprintf(tbuf, sizeof(tbuf), "Container: %s\nDifficulty: %3.1f\nTerrain: %3.1f\n\n", gs_get_container(wpt->gc_data->container), wpt->gc_data->diff/10.0, wpt->gc_data->terr/10.0);
	gs = xstrappend(gs, tbuf);

	tmp1 = strip_html(&wpt->gc_data->desc_short);
	tmp2 = strip_html(&wpt->gc_data->desc_long);
	gs = xstrappend(gs, tmp1);
	gs = xstrappend(gs, tmp2);

	tmp3 = rot13(wpt->gc_data->hint);
	snprintf(tbuf, sizeof(tbuf), "\n\nHint: %s\n", tmp3);
	gs = xstrappend(gs, tbuf);

	xfree(tmp1);
	xfree(tmp2);
	xfree(tmp3);

	tmp1 = enscape(gs);
	xfree(gs);

	return tmp1;
}
Beispiel #3
0
void
AIMProtocol::GotMessage(void* imcomm, char* who, int aut, char* recvmsg)
{
	BMessage msg(IM_MESSAGE);
	msg.AddInt32("im_what", IM_MESSAGE_RECEIVED);
	msg.AddString("protocol", kProtocolSignature);
	msg.AddString("id", who);
	msg.AddString("body", strip_html(recvmsg));

	gServerMsgr->SendMessage(&msg);
}
Beispiel #4
0
void
AIMProtocol::BuddyAwayMsg(void* imcomm, char* who, char* awaymsg)
{
	BMessage msg(IM_MESSAGE);
	msg.AddInt32("im_what", IM_STATUS_SET);
	msg.AddString("protocol", kProtocolSignature);
	msg.AddString("id", who);
	msg.AddInt32("status", CAYA_AWAY);
	msg.AddString("message", strip_html(awaymsg));

	gServerMsgr->SendMessage(&msg);
}
Beispiel #5
0
/* PROTO */
void
buddy_profile(void *c, const char *who, const char *msg)
{
	char           *ptext;
	long            days, hours, minutes;
	struct BuddyList *trav;
	char           *sname;
#ifdef DUMP_PROFILE
	FILE           *profile_dump;
#endif

	sname = simplify_sn(who);
	eraseline();

	for (trav = buddylist; trav; trav = trav->next) {
		if (strcmp(trav->sn, sname) == 0) {
			if (trav->idle) {
				b_echostr_s();
				printf("[%s] Idle: ", who);
				days = trav->idletime / 1440;
				hours = (trav->idletime % 1440) / 60;
				minutes = trav->idletime % 60;
				if (days > 0)
					printf("%ld days, ", days);
				if (hours > 0)
					printf("%ld hour%s, ", hours, (hours != 1 ? "s" : ""));

				printf("%ld minute%s\n", minutes,
				       (minutes != 1 ? "s" : ""));
				break;
			}
		}
	}

	b_echostr_s();
	printf("[%s] Info:\n", who);

	free(sname);

	ptext = strip_html(msg);
	prettyprint_echostr(ptext, PROFILE_ECHOSTR);

	free(ptext);

#ifdef DUMP_PROFILE
	if ((profile_dump = fopen(PROFILE_DUMP_PATH, "w")) != NULL) {
		fprintf(profile_dump, "%s", msg);
		fclose(profile_dump);
	}
#endif

	show_prompt();
}
Beispiel #6
0
char* strip_html(char *src)
{
	int size = 	MultiByteToWideChar(CP_ACP, 0, src, -1, 0, 0);
	wchar_t* buf=new wchar_t[size];
	MultiByteToWideChar(CP_ACP, 0, src, -1,buf,size);
	wchar_t* stripped_buf=strip_html(buf);
	delete[] buf;
	size = WideCharToMultiByte( CP_ACP, 0, stripped_buf, -1, 0, 0, NULL, NULL );
	char* dest=new char[size];
	WideCharToMultiByte( CP_ACP, 0, stripped_buf, -1, dest, size, NULL, NULL );
	delete[] stripped_buf;
	return dest;
}
Beispiel #7
0
static void *prplcb_notify_userinfo( PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info )
{
	struct im_connection *ic = purple_ic_by_gc( gc );
	GString *info = g_string_new( "" );
	GList *l = purple_notify_user_info_get_entries( user_info );
	char *key;
	const char *value;
	int n;
	
	while( l )
	{
		PurpleNotifyUserInfoEntry *e = l->data;
		
		switch( purple_notify_user_info_entry_get_type( e ) )
		{
		case PURPLE_NOTIFY_USER_INFO_ENTRY_PAIR:
		case PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER:
			key = g_strdup( purple_notify_user_info_entry_get_label( e ) );
			value = purple_notify_user_info_entry_get_value( e );
			
			if( key )
			{
				strip_html( key );
				g_string_append_printf( info, "%s: ", key );
				
				if( value )
				{
					n = strlen( value ) - 1;
					while( isspace( value[n] ) )
						n --;
					g_string_append_len( info, value, n + 1 );
				}
				g_string_append_c( info, '\n' );
				g_free( key );
			}
			
			break;
		case PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK:
			g_string_append( info, "------------------------\n" );
			break;
		}
		
		l = l->next;
	}
	
	imcb_log( ic, "User %s info:\n%s", who, info->str );
	g_string_free( info, TRUE );
	
	return NULL;
}
Beispiel #8
0
/* PROTO */
void
buddy_awaymsg(void *c, const char *who, const char *msg)
{
	char           *ptext;

	eraseline();
	b_echostr_s();
	printf("[%s] Away: ", who);
	ptext = strip_html(msg);
	prettyprint(ptext, 12 + strlen(who));

	if (ptext[0] == 0)
		printf("\n");

	free(ptext);
	show_prompt();
}
Beispiel #9
0
static gint
messagebox_cb(GWEN_GUI *gwen_gui, guint32 flags, const gchar *title,
              const gchar *text, const gchar *b1, const gchar *b2,
              const gchar *b3, guint32 guiid)
{
    GncGWENGui *gui = GETDATA_GUI(gwen_gui);
    GtkWidget *dialog;
    GtkWidget *vbox;
    GtkWidget *label;
    gchar *raw_text;
    gint result;

    ENTER("gui=%p, flags=%d, title=%s, b1=%s, b2=%s, b3=%s", gui, flags,
          title ? title : "(null)", b1 ? b1 : "(null)", b2 ? b2 : "(null)",
          b3 ? b3 : "(null)");

    dialog = gtk_dialog_new_with_buttons(
                 title, gui->parent ? GTK_WINDOW(gui->parent) : NULL,
                 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                 b1, 1, b2, 2, b3, 3, (gchar*) NULL);

    raw_text = strip_html(g_strdup(text));
    label = gtk_label_new(raw_text);
    g_free(raw_text);
    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
    vbox = gtk_vbox_new(TRUE, 0);
    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
    gtk_container_add(GTK_CONTAINER(vbox), label);
    gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox);
    gtk_widget_show_all(dialog);

    result = gtk_dialog_run(GTK_DIALOG(dialog));
    gtk_widget_destroy(dialog);

    if (result < 1 || result > 3)
    {
        g_warning("messagebox_cb: Bad result %d", result);
        result = 0;
    }

    LEAVE("result=%d", result);
    return result;
}
Beispiel #10
0
/* PROTO */
void
getmessage(void *c, const char *who, const int automessage, const char *message)
{
	const char	*msgin = message;
	char           *msg = NULL, *tempmsg = NULL;

	char           *sname;
	struct Waiting *wtemp, *wptr = NULL;
	int             offset, foundWaiting = 0;

	int otr_message = 0;
	if (conn->otr) {
		struct BuddyList	*buddy = NULL;
		buddy = find_buddy(who);

		if (buddy) {
			if (buddy->otr != -1) {
				char *newmsg;
				int ret = otrl_message_receiving(userstate, &ui_ops, NULL, conn->username,
								otr_proto, buddy->sn, msgin, &newmsg, NULL,
								&buddy->otr_context, NULL, NULL);
				if (ret) {
#ifdef DEBUG
					b_echostr_s();
					printf("[OTR] debug: internal msg %s\n", msgin);
#endif
					return;
				} else {
					if (newmsg) {
						msgin = strdup(newmsg);
						otrl_message_free(newmsg);
	                                        if (buddy->otr_context->msgstate == OTRL_MSGSTATE_ENCRYPTED)
							otr_message = 1;
					}
				}
			}
		}
	}

	tempmsg = strip_html(msgin);

	
	if (tempmsg == NULL)
		return;
	if (strlen(tempmsg) == 0) {
		free(tempmsg);
		return;
	}
	if (conn->netspeak_filter) {
		msg = undo_netspeak(tempmsg);
		free(tempmsg);
	} else {
		msg = tempmsg;
	}

	if (msg == NULL)
		return;

	if (strlen(msg) == 0) {
		free(msg);
		return;
	}
	if (conn->istyping == 0) {
		if (conn->lastsn != NULL)
			free(conn->lastsn);
		conn->lastsn = simplify_sn(who);
	}
	sname = simplify_sn(who);

	if (waiting == NULL) {
		waiting = malloc(sizeof(struct Waiting));
		wptr = waiting;
	} else {
		for (wtemp = waiting; wtemp != NULL; wtemp = wtemp->next)
			if (imcomm_compare_nicks(c, wtemp->sn, who)) {
				foundWaiting = 1;
				wptr = wtemp;
				break;
			}
		if (!foundWaiting) {
			for (wtemp = waiting; wtemp->next != NULL;
			     wtemp = wtemp->next);
			wtemp->next = malloc(sizeof(struct Waiting));
			wptr = wtemp->next;
		}
	}

	if (!foundWaiting) {
		wptr->sn = strdup(who);
		wptr->next = NULL;

		if (conn->isaway && !automessage) {
			if ((conn->respond_idle_only && conn->isidle)
			    || (!conn->respond_idle_only)) {
				imcomm_im_send_message(c, who, conn->awaymsg, 1);
				eraseline();
				b_echostr_s();

				if (conn->timestamps) {
					addts();
					putchar(' ');
				}
				printf("Sent auto-response to %s.\n", who);
				show_prompt();
			}
		}
	}
#ifdef MESSAGE_QUEUE
	if (conn->isaway)
		wptr->mqueue = addToMQueue(wptr->mqueue, msg, who);
#endif				/* MESSAGE_QUEUE */


	eraseline();

	if (conn->bell_on_incoming)
		putchar('\a');

	if (conn->timestamps) {
		addts();
		putchar(' ');
		offset = 11;
	} else {
		offset = 0;
	}

	offset += strlen(who) + 2;
	if (automessage) {
		set_color(COLOR_AUTORESPONSE);
		printf("*AUTO RESPONSE* ");
		set_color(0);
		offset += 16;
	}
	set_color(COLOR_INCOMING_IM);
	if (!otr_message)
		printf("%s", who);
	else {
		offset += 5;
		printf("(otr)%s", who);
	}
	set_color(0);
	printf(": ");
	wordwrap_print(msg, offset);
	if (automessage)
		log_event(EVENT_IM_AUTORESPONSE, sname, msg);
	else
		log_event(EVENT_IM, sname, msg);

	free(msg);
	free(sname);
	show_prompt();
}
Beispiel #11
0
/* PROTO */
void
input_send_message(char *arg)
{
	char           *msg, *msg_strip, *temp, *sn;
	char           *fullmsg;
	size_t          fullmsg_len;
	int             offset;

	if (conn->conn == NULL)
		return;

	temp = strchr(arg, ' ');

	if (temp == NULL) {
		printf("\n");
		b_echostr_s();
		printf("No message to send.\n");
		return;
	}
	if (strlen(temp + 1) == 0) {
		printf("\nNo message to send.\n");
		return;
	}
	if (conn->netspeak_filter)
		msg = undo_netspeak(temp + 1);
	else
		msg = temp + 1;

	sn = malloc(temp - arg + 1);
	sn[temp - arg] = 0;
	strncpy(sn, arg, temp - arg);
	fullmsg_len =
		strlen(msg) + strlen(SEND_FORMAT_BEGIN) + strlen(SEND_FORMAT_END) +
		1;
	fullmsg = malloc(fullmsg_len + 1);
	snprintf(fullmsg, fullmsg_len, "%s%s%s", SEND_FORMAT_BEGIN, msg,
		 SEND_FORMAT_END);
	imcomm_im_send_message(conn->conn, sn, fullmsg, 0);
	free(fullmsg);
	eraseline();

	if (conn->timestamps) {
		addts();
		putchar(' ');
		offset = 13;
	} else {
		offset = 2;
	}

	offset += strlen(sn) + 2;
	set_color(COLOR_OUTGOING_IM);
	printf("->%s", sn);
	set_color(0);
	printf(": ");
	msg_strip = strip_html(msg);
	wordwrap_print(msg_strip, offset);
	free(msg_strip);

	if (conn->lastsn != NULL)
		free(conn->lastsn);

	conn->lastsn = strdup(sn);
	log_event(EVENT_IMSEND, sn, msg);
	free(sn);

	if (conn->netspeak_filter)
		free(msg);
}
Beispiel #12
0
/* PROTO */
void
getmessage(void *c, const char *who, const int automessage, const char *message)
{
	char           *msg, *tempmsg;

	char           *sname;
	struct Waiting *wtemp, *wptr = NULL;
	int             offset, foundWaiting = 0;

	tempmsg = strip_html(message);
	if (tempmsg == NULL)
		return;
	if (strlen(tempmsg) == 0) {
		free(tempmsg);
		return;
	}
	if (conn->netspeak_filter) {
		msg = undo_netspeak(tempmsg);
		free(tempmsg);
	} else {
		msg = tempmsg;
	}

	if (msg == NULL)
		return;

	if (strlen(msg) == 0) {
		free(msg);
		return;
	}
	if (conn->istyping == 0) {
		if (conn->lastsn != NULL)
			free(conn->lastsn);
		conn->lastsn = simplify_sn(who);
	}
	sname = simplify_sn(who);

	if (waiting == NULL) {
		waiting = malloc(sizeof(struct Waiting));
		wptr = waiting;
	} else {
		for (wtemp = waiting; wtemp != NULL; wtemp = wtemp->next)
			if (imcomm_compare_nicks(c, wtemp->sn, who)) {
				foundWaiting = 1;
				wptr = wtemp;
				break;
			}
		if (!foundWaiting) {
			for (wtemp = waiting; wtemp->next != NULL;
			     wtemp = wtemp->next);
			wtemp->next = malloc(sizeof(struct Waiting));
			wptr = wtemp->next;
		}
	}

	if (!foundWaiting) {
		wptr->sn = strdup(who);
		wptr->next = NULL;

		if (conn->isaway && !automessage) {
			if ((conn->respond_idle_only && conn->isidle)
			    || (!conn->respond_idle_only)) {
				imcomm_im_send_message(c, who, conn->awaymsg, 1);
				eraseline();
				b_echostr_s();

				if (conn->timestamps) {
					addts();
					putchar(' ');
				}
				printf("Sent auto-response to %s.\n", who);
				show_prompt();
			}
		}
	}
#ifdef MESSAGE_QUEUE
	if (conn->isaway)
		wptr->mqueue = addToMQueue(wptr->mqueue, msg, who);
#endif				/* MESSAGE_QUEUE */


	eraseline();

	if (conn->bell_on_incoming)
		putchar('\a');

	if (conn->timestamps) {
		addts();
		putchar(' ');
		offset = 11;
	} else {
		offset = 0;
	}

	offset += strlen(who) + 2;
	if (automessage) {
		set_color(COLOR_AUTORESPONSE);
		printf("*AUTO RESPONSE* ");
		set_color(0);
		offset += 16;
	}
	set_color(COLOR_INCOMING_IM);
	printf("%s", who);
	set_color(0);
	printf(": ");
	wordwrap_print(msg, offset);
	if (automessage)
		log_event(EVENT_IM_AUTORESPONSE, sname, msg);
	else
		log_event(EVENT_IM, sname, msg);

	free(msg);
	free(sname);
	show_prompt();
}
Beispiel #13
0
static void
mmo_write_wpt_cb(const waypoint *wpt)
{
	char *str, *cx;
	int objid;
	time_t time;
	int icon = 0;

	time = wpt->creation_time;
	if (time < 0) time = 0;
	
	if (mmo_datatype == trkdata) {
		gbfputdbl(wpt->latitude, fout);
		gbfputdbl(wpt->longitude, fout);
		gbfputc(0, fout);
		gbfputuint32(time, fout);
		if (wpt->altitude != unknown_alt) 
			gbfputflt(wpt->altitude, fout);
		else
			gbfputflt(0, fout);

		return;
	}

	objid = mmo_write_obj_head("CObjWaypoint",
		(wpt->shortname && *wpt->shortname) ? wpt->shortname : "Mark", time, wptdata);
	mmo_register_object(objid, wpt, wptdata);
	mmo_write_category("CCategory", (mmo_datatype == rtedata) ? "Waypoints" : "Marks");

	gbfputdbl(wpt->latitude, fout);
	gbfputdbl(wpt->longitude, fout);
	
	if (mmo_datatype == rtedata) {
		int i = mmo_get_objid(mmo_rte);
		gbfputuint16(1, fout); /* two extra bytes */
		gbfputuint16(i & 0x7FFF, fout);
	}
	else
		gbfputuint16(0, fout); /* extra bytes */

	if (wpt->url && *wpt->url) {
		str = xstrdup("_FILE_ ");
		str = xstrappend(str, wpt->url);
		str = xstrappend(str, "\n");
	}
	else str = xstrdup("");
	
	cx = wpt->notes;
	if (cx == NULL) cx = wpt->description;
	if (cx != NULL) {
		char *kml = NULL;
		
		if (strcmp(wpt->session->name, "kml") == 0) {
			utf_string tmp;

			tmp.utfstring = cx;
			tmp.is_html = 1;
			cx = kml = strip_html(&tmp);
		}
		str = xstrappend(str, cx);
		if (kml) xfree(kml);
	}
	mmo_writestr(str);
	xfree(str);
	
	gbfputuint32(0x01, fout);
	if WAYPT_HAS(wpt, proximity) gbfputflt((int) wpt->proximity, fout);
	else gbfputflt(0, fout);
Beispiel #14
0
static void
get_input(GncGWENGui *gui, guint32 flags, const gchar *title, const gchar *text,
          gchar **input, gint min_len, gint max_len)
{
    GladeXML *xml;
    GtkWidget *dialog;
    GtkWidget *heading_label;
    GtkWidget *input_entry;
    GtkWidget *confirm_entry;
    GtkWidget *confirm_label;
    GtkWidget *remember_pin_checkbutton;
    const gchar *internal_input, *internal_confirmed;
    gboolean confirm = (flags & GWEN_GUI_INPUT_FLAGS_CONFIRM) != 0;
    gboolean hidden = (flags & GWEN_GUI_INPUT_FLAGS_SHOW) == 0;
    gboolean is_tan = (flags & GWEN_GUI_INPUT_FLAGS_TAN) != 0;
    gint retval;

    g_return_if_fail(input);
    g_return_if_fail(max_len >= min_len && max_len > 0);

    ENTER(" ");

    /* Set up dialog */
    xml = gnc_glade_xml_new("aqbanking.glade", "Password Dialog");
    dialog = glade_xml_get_widget(xml, "Password Dialog");
    g_object_set_data_full(G_OBJECT(dialog), "xml", xml, g_object_unref);

    heading_label = glade_xml_get_widget(xml, "heading_label");
    input_entry = glade_xml_get_widget(xml, "input_entry");
    confirm_entry = glade_xml_get_widget(xml, "confirm_entry");
    confirm_label = glade_xml_get_widget(xml, "confirm_label");
    remember_pin_checkbutton = glade_xml_get_widget(xml, "remember_pin");
    if (is_tan)
    {
        gtk_widget_hide(remember_pin_checkbutton);
    }
    else
    {
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remember_pin_checkbutton),
                                     gui->cache_passwords);
    }

    if (gui->parent)
        gtk_window_set_transient_for(GTK_WINDOW(dialog),
                                     GTK_WINDOW(gui->parent));
    if (title)
        gtk_window_set_title(GTK_WINDOW(dialog), title);

    if (text)
    {
        gchar *raw_text = strip_html(g_strdup(text));
        gtk_label_set_text(GTK_LABEL(heading_label), raw_text);
        g_free(raw_text);
    }

    if (*input)
    {
        gtk_entry_set_text(GTK_ENTRY(input_entry), *input);
        erase_password(*input);
        *input = NULL;
    }

    if (confirm)
    {
        gtk_entry_set_activates_default(GTK_ENTRY(input_entry), FALSE);
        gtk_entry_set_activates_default(GTK_ENTRY(confirm_entry), TRUE);
        gtk_entry_set_max_length(GTK_ENTRY(input_entry), max_len);
        gtk_entry_set_max_length(GTK_ENTRY(confirm_entry), max_len);
    }
    else
    {
        gtk_entry_set_activates_default(GTK_ENTRY(input_entry), TRUE);
        gtk_entry_set_max_length(GTK_ENTRY(input_entry), max_len);
        gtk_widget_hide(confirm_entry);
        gtk_widget_hide(confirm_label);
    }
    gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);

    /* Ask the user until he enters a valid input or cancels */
    while (TRUE)
    {
        gboolean remember_pin;

        if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK)
            break;

        if (!is_tan)
        {
            /* Enable or disable the password cache */
            remember_pin = gtk_toggle_button_get_active(
                               GTK_TOGGLE_BUTTON(remember_pin_checkbutton));
            enable_password_cache(gui, remember_pin);
            gnc_gconf_set_bool(GCONF_SECTION_AQBANKING, KEY_REMEMBER_PIN,
                               remember_pin, NULL);
        }

        internal_input = gtk_entry_get_text(GTK_ENTRY(input_entry));
        if (strlen(internal_input) < min_len)
        {
            gboolean retval;
            gchar *msg = g_strdup_printf(
                             _("The PIN needs to be at least %d characters \n"
                               "long. Do you want to try again?"), min_len);
            retval = gnc_verify_dialog(gui->parent, TRUE, "%s", msg);
            g_free(msg);
            if (!retval)
                break;
            continue;
        }

        if (!confirm)
        {
            *input = g_strdup(internal_input);
            break;
        }

        internal_confirmed = gtk_entry_get_text(GTK_ENTRY(confirm_entry));
        if (strcmp(internal_input, internal_confirmed) == 0)
        {
            *input = g_strdup(internal_input);
            break;
        }
    }

    /* This trashes passwords in the entries' memory as well */
    gtk_widget_destroy(dialog);

    LEAVE("input %s", *input ? "non-NULL" : "NULL");
}
Beispiel #15
0
/*******************************************************************
 *	從 URI 判斷要求及抓出有用的資訊
 *	set BOARDNAME, POST_NAME, SKIN_FILE
 *
 *	return URLParaType
 *******************************************************************/
int ParseURI(const char *curi, REQUEST_REC *r, BOARDHEADER *board, POST_FILE *pf)
{
	char *p, *boardname;
	int HttpRequestType;
	char skin[PATHLEN], post[PATHLEN];

	*skin = 0x00;
	*post = 0x00;
	*BBS_SUBDIR = 0x00;

	boardname = board->filename;
	HttpRequestType = r->HttpRequestType;


	if(curi[strlen(curi)-1] == '\\')
	{
		strncat(skin_file->filename, curi, strlen(curi)-1);
		return Redirect;
	}
	else if((p = strstr(curi, "/treasure/")) != NULL)
	{
		/*
			subdir/treasure/bname/
			subdir/treasure/bname/start-end
			subdir/treasure/bname/treadir/treapost
		*/

		xstrncpy(BBS_SUBDIR, curi+1, p-curi+1);
		curi = p + 10;
	#if 0
		if(curi[strlen(curi)-1] == '\\')
		{
			sprintf(skin_file->filename, "/%streasure/", BBS_SUBDIR);
			strncat(skin_file->filename, curi, strlen(curi)-1);
			return Redirect;
		}
	#endif
		GetURIToken(boardname, post, skin, curi);

#if 0
		fprintf(fp_out, "[BOARDNAME=%s, post=%s, skin=%s]<br>", boardname, post, skin);
		fflush(fp_out);
#endif

		if(HttpRequestType == POST)
		{
			xstrncpy(pf->POST_NAME, post, PATHLEN);

			if(!strcmp(skin, POST_PostSend))
				return TreaSend;
			else if(!strcmp(skin, POST_PostEdit))
				return TreaEdit;
			else if(!strcmp(skin, POST_PostForward))
				return TreaForward;
			else if(!strcmp(skin, POST_PostDelete))
				return TreaDelete;
			else
				return Board;
		}

		if(strlen(boardname)==0)	/* no BOARDNAME assigned , list all boards */
		{
			if(strlen(skin)==0)
			{
				sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_TreaBoardList);
				return TreaBoardList;
			}
			else
			{
				/* skin is boardname */
				sprintf(skin_file->filename, "/%streasure/%s/", BBS_SUBDIR, skin);
				return Redirect;
			}
		}

		if(strlen(skin)==0)		/* must be treasure dir */
		{
			if(strlen(post)==0)
			{
				settreafile(pf->POST_NAME, board->filename, DIR_REC);
			}
			else
			{
				settreafile(pf->POST_NAME, board->filename, post);
				strcat(pf->POST_NAME, "/");
				strcat(pf->POST_NAME, DIR_REC);
			}

			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_TreaList);
			return TreaList;
		}

		if(strlen(post))	/* has treasure sub-dir*/
		{
			settreafile(pf->POST_NAME, boardname, post);
			strcat(pf->POST_NAME, "/");
			strcat(pf->POST_NAME, skin);
		}
		else
		{
			settreafile(pf->POST_NAME, boardname, skin);
		}

		if(isPost(skin))
		{
			strip_html(pf->POST_NAME);
			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_TreaPost);
			return TreaRead;
		}

		if(isdir(pf->POST_NAME))	/* check isdir before isPost */
		{
			sprintf(skin_file->filename, "/%s%s/", BBS_SUBDIR, pf->POST_NAME);
			return Redirect;
		}

		sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, skin);
		if(CacheState(skin_file->filename, NULL) >=0
		|| isfile(skin_file->filename))
		{
			if(strlen(post)==0)
				return TreaList;

			settreafile(pf->POST_NAME, board->filename, post);
			return TreaRead;
		}

		if(isList(skin, &(pf->list_start), &(pf->list_end)))
		{
			if(strlen(post)==0)
				settreafile(pf->POST_NAME, board->filename, DIR_REC);
			else
				sprintf(pf->POST_NAME, "treasure/%s/%s/%s", boardname, post, DIR_REC);

			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_TreaList);
			return TreaList;
		}
		else
		{
			settreafile(skin_file->filename, boardname, skin);
			return Board;
		}

	}
	else if((p = strstr(curi, "/boards/")) != NULL)
	{
		/*
			subdir/board/bname/
			subdir/board/bname/start-end
			subdir/board/bname/post
		*/

		xstrncpy(BBS_SUBDIR, curi+1, p-curi+1);
		curi = p + 8;

		GetURIToken(boardname, post, skin, curi);

#if 0
		fprintf(fp_out, "[BOARDNAME=%s, post=%s, skin=%s]<br>", boardname, post, skin);
		fflush(fp_out);
#endif

		if(HttpRequestType == POST)
		{
			xstrncpy(pf->POST_NAME, post, PATHLEN);

			if(!strcmp(skin, POST_PostSend))
				return PostSend;
			else if(!strcmp(skin, POST_PostEdit))
				return PostEdit;
			else if(!strcmp(skin, POST_PostForward))
				return PostForward;
			else if(!strcmp(skin, POST_PostDelete))
				return PostDelete;
			else if(!strcmp(skin, POST_BoardModify))
				return BoardModify;
			else if(!strcmp(skin, POST_SkinModify))
				return SkinModify;
			else if(!strcmp(skin, POST_AccessListModify))
				return AccessListModify;
			else
				return Board;
		}

		if(strlen(boardname)==0)
		{
			/* case:
				/boards/
				/boards/boardname
			*/

			if(strlen(skin)==0)
			{
				sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_BoardList);
				return BoardList;
			}
			else
			{
				/* skin is boardname */
				sprintf(skin_file->filename, "/%sboards/%s/", BBS_SUBDIR, skin);
				return Redirect;
			}
		}

		if(strlen(skin)==0)
		{
			/* case: /boards/boardname/ */

			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_PostList);
			setboardfile(pf->POST_NAME, boardname, DIR_REC);
			return PostList;
		}

		if(isList(skin, &(pf->list_start), &(pf->list_end)))
		{
			setboardfile(pf->POST_NAME, board->filename, DIR_REC);
			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_PostList);
			return PostList;
		}

		if(isPost(skin))
		{
			strip_html(skin);

			setboardfile(pf->POST_NAME, boardname, skin);
			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_Post);
			return PostRead;
		}

		sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, skin);

		if(CacheState(skin_file->filename, NULL) >=0
		|| isfile(skin_file->filename))
		{
			if(strlen(post)==0)		/* is DIR_REC skin */
			{
				if(!strcmp(skin, HTML_SkinModify))
				{
					*(pf->POST_NAME) = '\0';
					return SkinModify;
				}
				else
				{
					setboardfile(pf->POST_NAME, boardname, DIR_REC);
					return PostList;
				}
			}
			else					/* is post skin */
			{
				sprintf(pf->POST_NAME, "%s%s%s", HTML_PATH, BBS_SUBDIR, post);

				if(isfile(pf->POST_NAME))
				{
					sprintf(pf->POST_NAME, "%s%s%s", HTML_PATH, BBS_SUBDIR, post);
					return SkinModify;
				}
				else
				{
					setboardfile(pf->POST_NAME, board->filename, post);
					return PostRead;
				}
			}
		}

		setboardfile(skin_file->filename, boardname, skin);
		return Board;

	}
	else if((p = strstr(curi, "/mail/")) != NULL)
	{
		xstrncpy(BBS_SUBDIR, curi+1, p-curi+1);
		curi = p + 6;

		GetURIToken(boardname, post, skin, curi);

#if 0
		fprintf(fp_out, "[BOARDNAME=%s, post=%s, skin=%s]<br>", boardname, post, skin);
		fflush(fp_out);
#endif

		if(HttpRequestType == POST)
		{
			xstrncpy(pf->POST_NAME, boardname, PATHLEN);

			if(!strcmp(skin, POST_MailSend))
				return MailSend;
			else if(!strcmp(skin, POST_MailForward))
				return MailForward;
			else if(!strcmp(skin, POST_MailDelete))
				return MailDelete;
			else
				return OtherFile;
		}

		/* !! 'BOARDNAME' is 'post' in this section !! */
#if 0
		if(strlen(boardname)==0 && strlen(skin)==0)
		{
			sprintf(skin_file->filename, "%s%s", BBS_SUBDIR, HTML_MailList);
			setmailfile(pf->POST_NAME, username, DIR_REC);
			return MailList;
		}
#endif

		if(strlen(skin)==0)
		{
			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_MailList);
			setmailfile(pf->POST_NAME, username, DIR_REC);
			return MailList;
		}

		if(isList(skin, &(pf->list_start), &(pf->list_end)))
		{
			setmailfile(pf->POST_NAME, username, DIR_REC);
			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_MailList);
			return MailList;
		}

		if(isPost(skin))
		{
			strip_html(skin);
			setmailfile(pf->POST_NAME, username, skin);
			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_Mail);
			return MailRead;
		}

		sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, skin);

		if(CacheState(skin_file->filename, NULL) >=0
		|| isfile(skin_file->filename))
		{
			if(strlen(board->filename) != 0)
			{
				setmailfile(pf->POST_NAME, username, boardname);
				return MailRead;
			}
			else
			{
				setmailfile(pf->POST_NAME, username, DIR_REC);
				return MailList;
			}
		}

		setmailfile(skin_file->filename, username, skin);
		return Mail;

	}
	else if((p = strstr(curi, "/users/")) != NULL)
	{
		xstrncpy(BBS_SUBDIR, curi+1, p-curi+1);
		curi = p + 7;

		GetURIToken(board->filename, post, skin, curi);

#if 0
		fprintf(fp_out, "[BOARDNAME=%s, post=%s, skin=%s]", board->filename, post, skin);
		fflush(fp_out);
#endif
		if(HttpRequestType == POST)
		{
			if(!strcmp(skin, POST_UserNew))
				return UserNew;
			else if(!strcmp(skin, POST_UserIdent))
				return UserIdent;
			else if(!strcmp(skin, POST_UserData))
				return UserData;
			else if(!strcmp(skin, POST_UserPlan))
				return UserPlan;
			else if(!strcmp(skin, POST_UserSign))
				return UserSign;
			else if(!strcmp(skin, POST_UserFriend))
				return UserFriend;
			else
				return OtherFile;
		}

		if(strlen(skin)==0)
		{
			if(strlen(board->filename)!=0)
			{
				xstrncpy(username, board->filename, IDLEN);
				sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_UserQuery);
				return UserQuery;
			}
			else
			{
				sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_UserList);
				return UserList;
			}
		}

		if(isList(skin, &(pf->list_start), &(pf->list_end)))
		{
			sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_UserList);
			return UserList;
		}

		sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, skin);

		if(CacheState(skin_file->filename, NULL) >=0
		|| isfile(skin_file->filename))
			return UserData;

		xstrncpy(username, skin, IDLEN);
		sprintf(skin_file->filename, "%s%s%s", HTML_PATH, BBS_SUBDIR, HTML_UserQuery);
		return UserQuery;

	}
	else if(!strncmp(curi, "/~", 2))	/* want user planfile only */
	{

		curi+=2;
#if 0
		fprintf(fp_out, "userplan name=%s ", curi);
		fflush(fp_out);
#endif

		xstrncpy(username, curi, IDLEN);
		strtok(username, " /\t\r\n");
		sprintf(skin_file->filename, "%s%s", HTML_PATH, HTML_UserPlanShow);

		return UserQuery;

	}
	else
	{
#if 0
		fprintf(fp_out, "[other file=%s]", curi);
		fflush(fp_out);
#endif

#ifdef NSYSUBBS
		/* for compatiable with old URL parameter ================== */
		if((p = strstr(curi, "BoardName=")) != NULL
		|| (p = strstr(curi, "boardname=")) != NULL)
		{
			p+=10;
			strtok(p, "?&/");
			sprintf(skin_file->filename, "/txtVersion/boards/%s/", p);
			return Redirect;
		}
		/* ========================================================= */
#endif
		xstrncpy(skin_file->filename, curi, PATHLEN);
		xstrncpy(BBS_SUBDIR, curi+1, PATHLEN);
		if((p = strrchr(BBS_SUBDIR, '/')) != NULL)
			*(p+1) = 0x00;
		else
			BBS_SUBDIR[0] = 0x00;

		return OtherFile;

	}
}
Beispiel #16
0
static void
text_disp(const waypoint *wpt)
{
	int latint, lonint;
	char tbuf[1024];
	time_t tm = wpt->creation_time;
	gbint32 utmz;
	double utme, utmn;
	char utmzc;
	char *tmpout1, *tmpout2;
	char *altout;
	fs_xml *fs_gpx;

	waypoint_count++;
	
	if (split_output) {
		char *thisfname;
		xasprintf(&thisfname, "%s%d", output_name, waypoint_count);
		file_out = gbfopen(thisfname, "w", MYNAME);
	}
	
	lonint = abs((int) wpt->longitude);
	latint = abs((int) wpt->latitude);

	GPS_Math_WGS84_To_UTM_EN(wpt->latitude, wpt->longitude, 
		&utme, &utmn, &utmz, &utmzc);

	if (tm == 0) 
		tm = time(NULL);
	strftime(tbuf, sizeof(tbuf), "%d-%b-%Y", localtime(&tm));

	tmpout1 = pretty_deg_format(wpt->latitude, wpt->longitude, degformat[2], " ", 0);
	if (wpt->altitude != unknown_alt) {
		xasprintf(&altout, " alt:%d", (int) ( (altunits[0]=='f')?METERS_TO_FEET(wpt->altitude):wpt->altitude) );
	}
	else {
		altout = "";
	}
	xasprintf (&tmpout2, "%s (%d%c %6.0f %7.0f)%s", tmpout1, utmz, utmzc, utme, utmn, altout );
	gbfprintf(file_out, "%-16s  %59s\n",
		(global_opts.synthesize_shortnames) ? mkshort_from_wpt(mkshort_handle, wpt) : wpt->shortname,
		tmpout2);
	xfree(tmpout2);
	xfree(tmpout1);	
	if (altout[0]) 
		xfree(altout);
	

	if (strcmp(wpt->description, wpt->shortname)) {
		gbfprintf(file_out, "%s", wpt->description);
		if (wpt->gc_data->placer) 
			gbfprintf(file_out, " by %s", wpt->gc_data->placer);
		}
		if (wpt->gc_data->terr) {
			gbfprintf(file_out, " - %s / %s - (%d%s / %d%s)\n", 
				gs_get_cachetype(wpt->gc_data->type), gs_get_container(wpt->gc_data->container), 
				(int)(wpt->gc_data->diff / 10), (wpt->gc_data->diff%10)?".5":"", 
				(int)(wpt->gc_data->terr / 10), (wpt->gc_data->terr%10)?".5":""  ); 
	        if (wpt->gc_data->desc_short.utfstring) {
	                char *stripped_html = strip_html(&wpt->gc_data->desc_short);
			gbfprintf (file_out, "\n%s\n", stripped_html);
                	xfree(stripped_html);
       		}
	        if (wpt->gc_data->desc_long.utfstring) {
	                char *stripped_html = strip_html(&wpt->gc_data->desc_long);
			gbfprintf (file_out, "\n%s\n", stripped_html);
                	xfree(stripped_html);
       		}
		if (wpt->gc_data->hint) {
			char *hint = NULL;
			if ( txt_encrypt ) 
				hint = rot13( wpt->gc_data->hint );
			else
				hint = xstrdup( wpt->gc_data->hint );
			gbfprintf (file_out, "\nHint: %s\n", hint);
			xfree( hint );
		}
	}
	else if (wpt->notes && (!wpt->description || strcmp(wpt->notes,wpt->description))) {
		gbfprintf (file_out, "\n%s\n", wpt->notes);
	}

	fs_gpx = NULL;
	if ( includelogs ) {
		fs_gpx = (fs_xml *)fs_chain_find( wpt->fs, FS_GPX);
	}
	
	if ( fs_gpx && fs_gpx->tag ) {
		xml_tag *root = fs_gpx->tag;
		xml_tag *curlog = NULL;
		xml_tag *logpart = NULL;
		curlog = xml_findfirst( root, "groundspeak:log" );
		while ( curlog ) {
			time_t logtime = 0;
			struct tm *logtm = NULL;
			gbfprintf( file_out, "\n" );
			
			logpart = xml_findfirst( curlog, "groundspeak:type" );
			if ( logpart ) {
				gbfprintf( file_out, "%s by ", logpart->cdata );
			}
			
			logpart = xml_findfirst( curlog, "groundspeak:finder" );
			if ( logpart ) {
				gbfprintf( file_out, "%s on ", logpart->cdata );
			}
			
			logpart = xml_findfirst( curlog, "groundspeak:date" );
			if ( logpart ) {
				logtime = xml_parse_time( logpart->cdata, NULL);
				logtm = localtime( &logtime );
				if ( logtm ) {
					gbfprintf( file_out, 
						"%4.4d-%2.2d-%2.2d\n",
						logtm->tm_year+1900,
						logtm->tm_mon+1,
						logtm->tm_mday );
				}
			}
			
			logpart = xml_findfirst( curlog, "groundspeak:log_wpt" );
			if ( logpart ) {
				char *coordstr = NULL;
				float lat = 0;
				float lon = 0;
				coordstr = xml_attribute( logpart, "lat" );
				if ( coordstr ) {
					lat = atof( coordstr );
				}
			        coordstr = xml_attribute( logpart, "lon" );
				if ( coordstr ) {
					lon = atof( coordstr );
				}
				coordstr = pretty_deg_format(lat, lon, degformat[2], " ", 0);
				gbfprintf( file_out, "%s\n", coordstr);
				xfree(coordstr);
			}
			
			logpart = xml_findfirst( curlog, "groundspeak:text" );
			if ( logpart ) {
				char *encstr = NULL;
				char *s = NULL;
				int encoded = 0;
				encstr = xml_attribute( logpart, "encoded" );
				encoded = (encstr[0] != 'F');
				
				if ( txt_encrypt && encoded ) {
					s = rot13( logpart->cdata );
				}
				else {
					s = xstrdup( logpart->cdata );
				}
					
				gbfprintf( file_out, "%s", s ); 
				xfree( s );
			}

			gbfprintf( file_out, "\n" );
			curlog = xml_findnext( root, curlog, "groundspeak:log" );
		}
	}
	if (! suppresssep) 
		gbfprintf(file_out, "\n-----------------------------------------------------------------------------\n");
	else
		gbfprintf(file_out, "\n");

	if (split_output) {
		gbfclose(file_out);
		file_out = NULL;
	}
}
Beispiel #17
0
int toc_main_interface(int type, char **args) {
	
	switch (type) {
		case TOC_IM_IN: {
			char *msg, *nick;		
			nick = rm_space(args[0]);
			msg = strip_html(args[1]);
			RemoveFromLLByKey(msgdus,nick);
			AddToLL(msgdus,nick,NULL);	
			msgprintf("%s", cparse(fget_string_var(FORMAT_MSG_FSET), 
				"%s %s %s %s",update_clock(GET_TIME), 
				nick, "AIM", msg));			
			if ( is_away ) 
				serv_send_im(args[0],away_message);
			free(nick);
			break;
		}
		case TOC_TRANSLATED_ERROR:
		case TOC_CONNECT_MSGS:
			statusprintf(args[0]);
			break;
		case TOC_BUDDY_LOGGED_OFF:
			statusprintf("%s logged off",args[0]);
			if ( get_dllint_var("aim_window") )
				build_aim_status(get_window_by_name("AIM"));
			break;
		case TOC_BUDDY_LOGGED_ON:
			statusprintf("%s logged on", args[0]);
			if ( get_dllint_var("aim_window") )
				build_aim_status(get_window_by_name("AIM"));
			break;
		case TOC_EVILED:
			statusprintf("You have been warned by %s.", ((args[0] == NULL) ? "an anonymous person" : args[0])); 
			statusprintf("Your new warning level is %s%%" , args[1]);
			if ( get_dllint_var("aim_window") )
				build_aim_status(get_window_by_name("AIM"));
			break;
		case TOC_CHAT_JOIN:
			chatprintf("Joined buddy chat %s",args[1]);
			strncpy(current_chat,args[1],511);
			break;
		case TOC_BUDDY_LEFT_CHAT:
			chatprintf("%s left %s",args[1],args[0]);
			break;
		case TOC_BUDDY_JOIN_CHAT:
			chatprintf("%s joined %s",args[1],args[0]);
			break;
		case TOC_CHAT_LEFT:
			chatprintf("Left chat id: %s",args[0]);	
			break;
		case TOC_CHAT_IN: {
			char *e,*name,*chat;
			/* chatprintf("got msg from chat: <%s@AIM> %s",args[1],args[3]); */
			/* Need to take better action here */
			e = strip_html(args[3]);
			name = rm_space(args[1]);
			chat = rm_space(args[4]);
			msgprintf("%s",cparse(fget_string_var(FORMAT_PUBLIC_OTHER_FSET), "%s %s %s %s", update_clock(GET_TIME), name, chat, e));			
			free(name); free(chat);
			break;
		}
		case TOC_GOTO_URL: 
			statusprintf("GOTO_URL: %s",args[0]);
			break;
		case TOC_CHAT_INVITE:
			statusprintf("Invited to %s by %s '%s'",args[0],args[2],args[3]);
			break;
		case TOC_LAG_UPDATE:
		case TOC_WENT_IDLE:
			if ( get_dllint_var("aim_window") )
				build_aim_status(get_window_by_name("AIM"));
			break;					
		case TOC_DIR_STATUS:
			if ( atoi(args[0]) == 1 )
				statusprintf("Directory information successfully changed.");
			else
				statusprintf("Error altering directory information, error code: %s",args[0]);
			break;
		default:
			statusprintf("INTERNAL ERROR: Unknown toc type: %d",type);
	}
	return 1;
}