Пример #1
0
static uint8* xf_cliprdr_process_requested_text(uint8* data, int* size)
{
	uint8* outbuf;

	outbuf = lf2crlf(data, size);

	return outbuf;
}
Пример #2
0
static BYTE* xf_cliprdr_process_requested_text(BYTE* data, int* size)
{
	BYTE* outbuf;

	outbuf = lf2crlf(data, size);

	return outbuf;
}
Пример #3
0
static BYTE* xf_cliprdr_process_requested_unicodetext(BYTE* data, int* size)
{
	char* inbuf;
	WCHAR* outbuf = NULL;
	int out_size;

	inbuf = (char*) lf2crlf(data, size);
	out_size = ConvertToUnicode(CP_UTF8, 0, inbuf, -1, &outbuf, 0);
	free(inbuf);

	*size = (int) ((out_size + 1) * 2);

	return (BYTE*) outbuf;
}
Пример #4
0
static BYTE* xf_cliprdr_process_requested_unicodetext(BYTE* data, int* size)
{
	char* inbuf;
	WCHAR* outbuf;
	int out_size;

	inbuf = (char*) lf2crlf(data, size);
	out_size = freerdp_AsciiToUnicodeAlloc(inbuf, &outbuf, 0);
	free(inbuf);

	*size = (int) ((out_size + 1) * 2);

	return (BYTE*) outbuf;
}
Пример #5
0
static uint8* xf_cliprdr_process_requested_unicodetext(uint8* data, int* size)
{
	uint8* inbuf;
	uint8* outbuf;
	size_t out_size;
	UNICONV* uniconv;

	inbuf = lf2crlf(data, size);

	uniconv = freerdp_uniconv_new();
	outbuf = (uint8*) freerdp_uniconv_out(uniconv, (char*) inbuf, &out_size);
	freerdp_uniconv_free(uniconv);

	xfree(inbuf);

	*size = (int) out_size + 2;

	return outbuf;
}
Пример #6
0
/* static */
int AmSipDialog::reply_error(const AmSipRequest& req, unsigned int code, 
			     const string& reason, const string& hdrs)
{
  string reply_sock = "/tmp/" + AmSession::getNewId();
  string code_str = int2str(code);
  int headers;

  string msg = 
    ":t_reply:\n" +
    code_str + "\n" + 
    reason + "\n" + 
    req.key + "\n" + 
    AmSession::getNewId() + "\n";

  headers = 0;

  if(!hdrs.empty()) {
    msg += "\"" + lf2crlf(escape(hdrs));
    headers = 1;
  }

  if (AmConfig::Signature.length()) {
    if (headers == 1) {
      msg += "Server: " + AmConfig::Signature + "\r\n";
    } else {
	msg += "\"Server: " + AmConfig::Signature + "\r\n";
	headers = 1;
    }
  }

  if (headers == 1) {
      msg += "\"\n";
  } else {
      msg += ".\n";
  }

  return AmServer::send_msg(msg,reply_sock, 500);
}
Пример #7
0
void remmina_rdp_cliprdr_get_clipboard_data(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui)
{
	RDP_CB_DATA_RESPONSE_EVENT* event;
	GtkClipboard* clipboard;
	UINT8* inbuf = NULL;
	UINT8* outbuf = NULL;
	GdkPixbuf *image = NULL;
	int size = 0;

	rfContext* rfi = GET_DATA(gp);

	clipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD);
	if (clipboard)
	{
		switch (ui->clipboard.format)
		{
			case CB_FORMAT_TEXT:
			case CB_FORMAT_UNICODETEXT:
			case CB_FORMAT_HTML:
			{
				inbuf = (UINT8*)gtk_clipboard_wait_for_text(clipboard);
				break;
			}

			case CB_FORMAT_PNG:
			case CB_FORMAT_JPEG:
			case CB_FORMAT_DIB:
			{
				image = gtk_clipboard_wait_for_image(clipboard);
				break;
			}
		}
	}

	/* No data received, send nothing */
	if (inbuf != NULL || image != NULL)
	{
		switch (ui->clipboard.format)
		{
			case CB_FORMAT_TEXT:
			case CB_FORMAT_HTML:
			{
				size = strlen((char*)inbuf);
				outbuf = lf2crlf(inbuf, &size);
				break;
			}
			case CB_FORMAT_UNICODETEXT:
			{
				size = strlen((char*)inbuf);
				inbuf = lf2crlf(inbuf, &size);
				size = (ConvertToUnicode(CP_UTF8, 0, (CHAR*)inbuf, -1, (WCHAR**)&outbuf, 0) + 1) * 2;
				g_free(inbuf);
				break;
			}
			case CB_FORMAT_PNG:
			{
				gchar* data;
				gsize buffersize;
				gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "png", NULL, NULL);
				outbuf = (UINT8*) malloc(buffersize);
				memcpy(outbuf, data, buffersize);
				size = buffersize;
				g_object_unref(image);
				break;
			}
			case CB_FORMAT_JPEG:
			{
				gchar* data;
				gsize buffersize;
				gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "jpeg", NULL, NULL);
				outbuf = (UINT8*) malloc(buffersize);
				memcpy(outbuf, data, buffersize);
				size = buffersize;
				g_object_unref(image);
				break;
			}
			case CB_FORMAT_DIB:
			{
				gchar* data;
				gsize buffersize;
				gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "bmp", NULL, NULL);
				size = buffersize - 14;
				outbuf = (UINT8*) malloc(size);
				memcpy(outbuf, data + 14, size);
				g_object_unref(image);
				break;
			}
		}
	}
	event = (RDP_CB_DATA_RESPONSE_EVENT*)
		        freerdp_event_new(CliprdrChannel_Class, CliprdrChannel_DataResponse, NULL, NULL);
	event->data = outbuf;
	event->size = size;
	freerdp_channels_send_event(rfi->instance->context->channels, (wMessage*) event);
}
string UnixSocketAdapter::serialize(const AmSipRequest& req, 
    const string &rplAddr)
{
  string msg;

  msg = ":t_uac_dlg:" 
#ifndef OpenSER
    + rplAddr + 
#endif
    "\n"
    + req.method + "\n"
    + req.r_uri + "\n";
    
  if(req.next_hop.empty())
    msg += ".";
  else
    msg += req.next_hop;

  msg += "\n";

#ifdef OpenSER
  msg += ".\n"; /* socket */
#endif

  string extraHdrs;

  extraHdrs += req.from;
  extraHdrs += "\n";
    
  extraHdrs += req.to;
  extraHdrs += "\n";
    
  extraHdrs += "CSeq: " + int2str(req.cseq) + " " + req.method + "\n"
    + "Call-ID: " + req.callid + "\n";
   
  if (! req.contact.empty())
    extraHdrs += req.contact;
    
  if (! req.hdrs.empty()) {
    extraHdrs += req.hdrs;
    if (req.hdrs[req.hdrs.length() - 1] != '\n')
      extraHdrs += "\n";
  }

  if(!req.route.empty())
    extraHdrs += req.route;
    
  if(!req.body.empty())
    extraHdrs += "Content-Type: " + req.content_type + "\n";
    
#ifdef OpenSER
  extraHdrs = "\"" + lf2crlf(escape(extraHdrs)) + "\"\n";
#endif

  string bodyFrame;
#ifndef OpenSER
  bodyFrame = ".\n" // EoH
    + req.body + ".\n\n";
#else
  // is lf2crlf() needed?! (see function for replies)
  if (!req.body.empty())
      bodyFrame = "\"" + req.body + "\"\n";
#endif

  msg += extraHdrs + bodyFrame;

  return msg;
}
string UnixSocketAdapter::serialize(const AmSipReply &reply, 
    const string &rplAddr)
{
  string msg;

  msg = ":t_reply:" 
#ifndef OpenSER
    + rplAddr +
#endif
    "\n";

  msg += int2str(reply.code);
  msg += "\n";

  msg += reply.reason;
  msg += "\n";

  msg += reply.serKey;
  msg += "\n";

  msg += reply.local_tag;
  msg += "\n";

  string extraHdrs, bodyFrame;

  if (! reply.hdrs.empty())
    extraHdrs += reply.hdrs;

  if (reply.code < 300) {
    if (! reply.contact.empty())
      extraHdrs += reply.contact;

    if (! reply.body.empty())
      extraHdrs += "Content-Type: " + reply.content_type + "\n";

#ifndef OpenSER
    bodyFrame += reply.body;
    bodyFrame += ".\n\n";
#else
    if (! reply.body.empty()) {
      // TODO: body already CRLF'ed?
      bodyFrame += "\"" + reply.body + "\"\n";
    }
#endif
  } 

#ifndef OpenSER
  else {
    bodyFrame = ".\n\n";
  }
  extraHdrs += ".\n";
#endif

#ifdef OpenSER
  if (extraHdrs.empty()) {
      extraHdrs = ".\n";
  } else {
      extraHdrs = "\"" + lf2crlf(escape(extraHdrs)) + "\"\n";
  }
#endif

  msg += extraHdrs + bodyFrame;
  return msg;
}
Пример #10
0
void remmina_rdp_cliprdr_get_clipboard_data(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui)
{
	TRACE_CALL(__func__);
	GtkClipboard* gtkClipboard;
	UINT8* inbuf = NULL;
	UINT8* outbuf = NULL;
	GdkPixbuf *image = NULL;
	int size = 0;
	rfContext* rfi = GET_PLUGIN_DATA(gp);
	RemminaPluginRdpEvent rdp_event = { 0 };
	CLIPRDR_FORMAT_DATA_RESPONSE* pFormatDataResponse;

	gtkClipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD);
	if (gtkClipboard) {
		switch (ui->clipboard.format) {
		case CF_TEXT:
		case CF_UNICODETEXT:
		case CB_FORMAT_HTML:
		{
			inbuf = (UINT8*)gtk_clipboard_wait_for_text(gtkClipboard);
			break;
		}

		case CB_FORMAT_PNG:
		case CB_FORMAT_JPEG:
		case CF_DIB:
		case CF_DIBV5:
		{
			image = gtk_clipboard_wait_for_image(gtkClipboard);
			break;
		}
		}
	}

	/* No data received, send nothing */
	if (inbuf != NULL || image != NULL) {
		switch (ui->clipboard.format) {
		case CF_TEXT:
		case CB_FORMAT_HTML:
		{
			size = strlen((char*)inbuf);
			outbuf = lf2crlf(inbuf, &size);
			break;
		}
		case CF_UNICODETEXT:
		{
			size = strlen((char*)inbuf);
			inbuf = lf2crlf(inbuf, &size);
			size = (ConvertToUnicode(CP_UTF8, 0, (CHAR*)inbuf, -1, (WCHAR**)&outbuf, 0) ) * sizeof(WCHAR);
			g_free(inbuf);
			break;
		}
		case CB_FORMAT_PNG:
		{
			gchar* data;
			gsize buffersize;
			gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "png", NULL, NULL);
			outbuf = (UINT8*)malloc(buffersize);
			memcpy(outbuf, data, buffersize);
			size = buffersize;
			g_object_unref(image);
			break;
		}
		case CB_FORMAT_JPEG:
		{
			gchar* data;
			gsize buffersize;
			gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "jpeg", NULL, NULL);
			outbuf = (UINT8*)malloc(buffersize);
			memcpy(outbuf, data, buffersize);
			size = buffersize;
			g_object_unref(image);
			break;
		}
		case CF_DIB:
		case CF_DIBV5:
		{
			gchar* data;
			gsize buffersize;
			gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "bmp", NULL, NULL);
			size = buffersize - 14;
			outbuf = (UINT8*)malloc(size);
			memcpy(outbuf, data + 14, size);
			g_object_unref(image);
			break;
		}
		}
	}

	pFormatDataResponse = (CLIPRDR_FORMAT_DATA_RESPONSE*)malloc(sizeof(CLIPRDR_FORMAT_DATA_RESPONSE));
	if (!pFormatDataResponse) {
		if (outbuf) free(outbuf);
		return;
	}

	ZeroMemory(pFormatDataResponse, sizeof(CLIPRDR_FORMAT_DATA_RESPONSE));
	rdp_event.type = REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_DATA_RESPONSE;
	rdp_event.clipboard_formatdataresponse.pFormatDataResponse = pFormatDataResponse;
	pFormatDataResponse->msgFlags = CB_RESPONSE_OK;
	pFormatDataResponse->dataLen = size;
	pFormatDataResponse->requestedFormatData = outbuf;
	remmina_rdp_event_event_push(gp, &rdp_event);

}
Пример #11
0
int AmSipDialog::sendRequest(const string& method, 
			     const string& content_type,
			     const string& body,
			     const string& hdrs)
{
  string msg,ser_cmd;
  string m_hdrs = hdrs;

  if(hdl)
    hdl->onSendRequest(method,content_type,body,m_hdrs,cseq);

  msg = ":t_uac_dlg:\n"
    + method + "\n"
    + remote_uri + "\n";
    
  if(next_hop.empty())
    msg += ".";
  else
    msg += next_hop;
    
  msg += "\n";
    
  msg += ".\n"; /* socket */

  msg += "\"From: " + escape(local_party);
  if(!local_tag.empty())
    msg += ";tag=" + local_tag;
    
  msg += "\n";
  
  msg += "To: " + escape(remote_party);
  if(!remote_tag.empty()) 
    msg += ";tag=" + remote_tag;
    
  msg += "\n";
    
  msg += "CSeq: " + int2str(cseq) + " " + method + "\n"
    + "Call-ID: " + callid + "\n";
    
  if((method!="BYE")&&(method!="CANCEL"))
    msg += lf2crlf(escape(getContactHdr()));
    
  if(!m_hdrs.empty()){
    msg += lf2crlf(escape(m_hdrs));
    if(m_hdrs[m_hdrs.length()-1] != '\n')
      msg += "\r\n";
  }

  if(!route.empty())
    msg += lf2crlf(getRoute());
    
  if(!body.empty())
    msg += "Content-Type: " + content_type + "\r\n";
    
  msg += "Max-Forwards: "  MAX_FORWARDS "\r\n";

  if (AmConfig::Signature.length()) 
    msg += "User-Agent: " + AmConfig::Signature + "\r\n";

  msg += "\"\n";

  if (!body.empty())
    msg += "\"" + lf2crlf(body) + "\"\n";

  if (AmServer::send_msg_replyhandler(msg)) 
    return -1;
    
  uac_trans[cseq] = AmSipTransaction(method,cseq);

  // increment for next request
  cseq++;
    
  return 0;
}
Пример #12
0
int AmSipDialog::reply(const AmSipRequest& req,
		       unsigned int  code,
		       const string& reason,
		       const string& content_type,
		       const string& body,
		       const string& hdrs)
{
  string m_hdrs = hdrs;
  int headers;

  if(hdl)
    hdl->onSendReply(req,code,reason,
		     content_type,body,m_hdrs);

  string reply_sock = "/tmp/" + AmSession::getNewId();
  string code_str = int2str(code);

  string msg = ":t_reply:\n";

  msg += code_str;
  msg += "\n";

  msg += reason;
  msg += "\n";

  msg += req.key;
  msg += "\n";

  msg += local_tag;
  msg += "\n";

  headers = 0;

  if(!m_hdrs.empty()) {
      msg += "\"" + lf2crlf(escape(m_hdrs));
      headers = 1;
  }

  if ((req.method!="CANCEL")&&
      !((req.method=="BYE")&&(code<300))) {
      if (headers == 1) {
	  msg += lf2crlf(escape(getContactHdr()));
      } else {
	  msg += "\"" + lf2crlf(escape(getContactHdr()));
	  headers = 1;
      }
  }
	  
  if(!body.empty()) {
      if (headers == 1) {  
	  msg += "Content-Type: " + content_type + "\r\n";
      } else {
	  msg += "\"Content-Type: " + content_type + "\r\n";
	  headers = 1;
      }
  }

  if (AmConfig::Signature.length()) {
      if (headers == 1) {
	  msg += "Server: " + AmConfig::Signature + "\r\n";
      } else {
	  msg += "\"Server: " + AmConfig::Signature + "\r\n";
	  headers = 1;
      }
  }

  if (headers == 1) {
      msg += "\"\n";
  } else {
      msg += ".\n";
  }

  if(!body.empty())
      msg += "\"" + body + "\"\n";

  if(updateStatusReply(req,code))
    return -1;

  return AmServer::send_msg(msg,reply_sock, 500);
}
Пример #13
0
void
orcqrencode(char *ctx)
{
	int version;
	int level;
	int hint;
	int size;
	int margin;
	int i;
	int doEncodeStructured;
	char buf[MAX_DATA_SIZE];
	char buf2[MAX_DATA_SIZE];
	char qrfile[SIZE_QRFILE];
	char qrfile_suffix[SIZE_QRFILE + 10];
	char *p;
	QRcode *code;
	QRcode_List *head, *entry;

OPENLOG;
	if((p = strchr(CTX(ctx, OFFSET_INFILE), ' ')) != NULL) *p = '\0';
	if((p = strchr(CTX(ctx, OFFSET_QRFILE), ' ')) != NULL) *p = '\0';

	memset(CTX(ctx, OFFSET_RET_CODE), QRENCODE_OK, SIZE_RET_CODE);

	if(euc2sjis(CTX(ctx, OFFSET_INFILE), buf) != 0){
		memset(CTX(ctx, OFFSET_RET_CODE), CHAR_CONV_ERROR, SIZE_RET_CODE);
		return;
	}

	hint = ctx_string2int(ctx, OFFSET_HINT, SIZE_HINT);

	if (hint < 2) {
		if(parse_csv(buf, buf2) !=0){
			memset(CTX(ctx, OFFSET_RET_CODE), KANA_CONV_ERROR, SIZE_RET_CODE);
			return;
		}
	} else {
		lf2crlf(buf,buf2);
	}

	snprintf(qrfile, SIZE_QRFILE, "%s", CTX(ctx, OFFSET_QRFILE));
	version = ctx_string2int(ctx, OFFSET_VERSION, SIZE_VERSION);
	if(version <= 0 || version > 40){
		memset(CTX(ctx, OFFSET_RET_CODE), PARAM_ERROR, SIZE_RET_CODE);
		return;	
	}
	switch(*CTX(ctx, OFFSET_LEVEL)){
		case 'L':
			level = QR_ECLEVEL_L;
			break;
		case 'M':
			level = QR_ECLEVEL_M;
			break;
		case 'Q':
			level = QR_ECLEVEL_Q;
			break;
		case 'H':
			level = QR_ECLEVEL_H;
			break;
		default:
			level = QR_ECLEVEL_L;
	}

	p = strrchr(qrfile, '.');
	if(p != NULL)*p = '\0';
	doEncodeStructured = ctx_string2int(ctx, OFFSET_STRUCTURED, SIZE_STRUCTURED);
	hint = (hint % 2) == 0 ? QR_MODE_KANJI : QR_MODE_8;
	size = ctx_string2int(ctx, OFFSET_PIXEL, SIZE_PIXEL);
	margin = ctx_string2int(ctx, OFFSET_MARGIN, SIZE_MARGIN);

	code = QRcode_encodeString(buf2, version, level, hint, 1);
	if (code != NULL) {
		if (code->version <= version) {
			snprintf(qrfile_suffix, sizeof(qrfile_suffix), 
				"%s_%02d.png", qrfile, 1);
			if(writePNG(code, qrfile_suffix, size, margin) != 0){
				memset(CTX(ctx, OFFSET_RET_CODE), WRITE_PNG_ERROR, SIZE_RET_CODE);
				QRcode_free(code);
				return;
			}
		SYSLOG("write single image");
			sprintf(buf, "%02d" , code->version);
			memcpy(CTX(ctx, OFFSET_RET_VERSION), buf, SIZE_RET_VERSION);
			sprintf(buf, "%02d" , 1);
			memcpy(CTX(ctx, OFFSET_RET_SYMBOLS), "01", SIZE_RET_SYMBOLS);
			QRcode_free(code);
			return;
		}
		QRcode_free(code);
	}
	if (doEncodeStructured) {
		head = QRcode_encodeStringStructured(buf2, version, level, hint ,1);
		if(head) {
			entry = head;
			i = 0;
			while(entry != NULL) {
				code = entry->code;
				snprintf(qrfile_suffix, 
					sizeof(qrfile_suffix), "%s_%02d.png", qrfile, i + 1);
				if(writePNG(code, qrfile_suffix, size, margin) != 0){
					memset(CTX(ctx, OFFSET_RET_CODE), WRITE_PNG_ERROR, SIZE_RET_CODE);
					break;
				}
				entry = entry->next;	
				i++;
			}
		SYSLOG("write multi images");
			QRcode_List_free(entry);
		}
		else {
			memset(CTX(ctx, OFFSET_RET_CODE), QRENCODE_ERROR, SIZE_RET_CODE);
		 	return;
		}
		sprintf(buf, "%02d" , head->code->version);
		memcpy(CTX(ctx, OFFSET_RET_VERSION), buf, SIZE_RET_VERSION);
		sprintf(buf, "%02d" , i);
		memcpy(CTX(ctx, OFFSET_RET_SYMBOLS), buf, SIZE_RET_SYMBOLS);
		QRcode_List_free(head);
	}
#if 1
	print_ctx(ctx);
#endif
SYSLOG("end");
	return;
}