|
Packit Service |
fa4841 |
/*
|
|
Packit Service |
fa4841 |
Android FreeRDP JNI Wrapper
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
Packit Service |
fa4841 |
If a copy of the MPL was not distributed with this file, You can obtain one at
|
|
Packit Service |
fa4841 |
http://mozilla.org/MPL/2.0/.
|
|
Packit Service |
fa4841 |
*/
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
package com.freerdp.freerdpcore.services;
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
import android.content.Context;
|
|
Packit Service |
fa4841 |
import android.graphics.Bitmap;
|
|
Packit Service |
fa4841 |
import android.net.Uri;
|
|
Packit Service |
fa4841 |
import android.support.v4.util.LongSparseArray;
|
|
Packit Service |
fa4841 |
import android.util.Log;
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
import com.freerdp.freerdpcore.application.GlobalApp;
|
|
Packit Service |
fa4841 |
import com.freerdp.freerdpcore.application.SessionState;
|
|
Packit Service |
fa4841 |
import com.freerdp.freerdpcore.domain.BookmarkBase;
|
|
Packit Service |
fa4841 |
import com.freerdp.freerdpcore.domain.ManualBookmark;
|
|
Packit Service |
fa4841 |
import com.freerdp.freerdpcore.presentation.ApplicationSettingsActivity;
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
import java.util.ArrayList;
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public class LibFreeRDP
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
private static final String TAG = "LibFreeRDP";
|
|
Packit Service |
fa4841 |
private static EventListener listener;
|
|
Packit Service |
fa4841 |
private static boolean mHasH264 = true;
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static final LongSparseArray<Boolean> mInstanceState = new LongSparseArray<>();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
static
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
final String h264 = "openh264";
|
|
Packit Service |
fa4841 |
final String[] libraries = { h264,
|
|
Packit Service |
fa4841 |
"freerdp-openssl",
|
|
Packit Service |
fa4841 |
"ssl",
|
|
Packit Service |
fa4841 |
"crypto",
|
|
Packit Service |
fa4841 |
"jpeg",
|
|
Packit Service |
fa4841 |
"winpr2",
|
|
Packit Service |
fa4841 |
"freerdp2",
|
|
Packit Service |
fa4841 |
"freerdp-client2",
|
|
Packit Service |
fa4841 |
"freerdp-android2" };
|
|
Packit Service |
fa4841 |
final String LD_PATH = System.getProperty("java.library.path");
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
for (String lib : libraries)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
try
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
Log.v(TAG, "Trying to load library " + lib + " from LD_PATH: " + LD_PATH);
|
|
Packit Service |
fa4841 |
System.loadLibrary(lib);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
catch (UnsatisfiedLinkError e)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
Log.e(TAG, "Failed to load library " + lib + ": " + e.toString());
|
|
Packit Service |
fa4841 |
if (lib.equals(h264))
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
mHasH264 = false;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean hasH264Support()
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return mHasH264;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native String freerdp_get_jni_version();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native String freerdp_get_version();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native String freerdp_get_build_date();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native String freerdp_get_build_revision();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native String freerdp_get_build_config();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native long freerdp_new(Context context);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native void freerdp_free(long inst);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native boolean freerdp_parse_arguments(long inst, String[] args);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native boolean freerdp_connect(long inst);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native boolean freerdp_disconnect(long inst);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native boolean freerdp_update_graphics(long inst, Bitmap bitmap, int x, int y,
|
|
Packit Service |
fa4841 |
int width, int height);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native boolean freerdp_send_cursor_event(long inst, int x, int y, int flags);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native boolean freerdp_send_key_event(long inst, int keycode, boolean down);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native boolean freerdp_send_unicodekey_event(long inst, int keycode,
|
|
Packit Service |
fa4841 |
boolean down);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native boolean freerdp_send_clipboard_data(long inst, String data);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static native String freerdp_get_last_error_string(long inst);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static void setEventListener(EventListener l)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
listener = l;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static long newInstance(Context context)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_new(context);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static void freeInstance(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
synchronized (mInstanceState)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (mInstanceState.get(inst, false))
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
freerdp_disconnect(inst);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
while (mInstanceState.get(inst, false))
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
try
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
mInstanceState.wait();
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
catch (InterruptedException e)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
throw new RuntimeException();
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
freerdp_free(inst);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean connect(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
synchronized (mInstanceState)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (mInstanceState.get(inst, false))
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
throw new RuntimeException("instance already connected");
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
return freerdp_connect(inst);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean disconnect(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
synchronized (mInstanceState)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (mInstanceState.get(inst, false))
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_disconnect(inst);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
return true;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean cancelConnection(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
synchronized (mInstanceState)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (mInstanceState.get(inst, false))
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_disconnect(inst);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
return true;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static String addFlag(String name, boolean enabled)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (enabled)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return "+" + name;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
return "-" + name;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean setConnectionInfo(Context context, long inst, BookmarkBase bookmark)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
BookmarkBase.ScreenSettings screenSettings = bookmark.getActiveScreenSettings();
|
|
Packit Service |
fa4841 |
BookmarkBase.AdvancedSettings advanced = bookmark.getAdvancedSettings();
|
|
Packit Service |
fa4841 |
BookmarkBase.DebugSettings debug = bookmark.getDebugSettings();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
String arg;
|
|
Packit Service |
fa4841 |
ArrayList<String> args = new ArrayList<String>();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add(TAG);
|
|
Packit Service |
fa4841 |
args.add("/gdi:sw");
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
final String clientName = ApplicationSettingsActivity.getClientName(context);
|
|
Packit Service |
fa4841 |
if (!clientName.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/client-hostname:" + clientName);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
String certName = "";
|
|
Packit Service |
fa4841 |
if (bookmark.getType() != BookmarkBase.TYPE_MANUAL)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return false;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
int port = bookmark.<ManualBookmark>get().getPort();
|
|
Packit Service |
fa4841 |
String hostname = bookmark.<ManualBookmark>get().getHostname();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add("/v:" + hostname);
|
|
Packit Service |
fa4841 |
args.add("/port:" + String.valueOf(port));
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
arg = bookmark.getUsername();
|
|
Packit Service |
fa4841 |
if (!arg.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/u:" + arg);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
arg = bookmark.getDomain();
|
|
Packit Service |
fa4841 |
if (!arg.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/d:" + arg);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
arg = bookmark.getPassword();
|
|
Packit Service |
fa4841 |
if (!arg.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/p:" + arg);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add(
|
|
Packit Service |
fa4841 |
String.format("/size:%dx%d", screenSettings.getWidth(), screenSettings.getHeight()));
|
|
Packit Service |
fa4841 |
args.add("/bpp:" + String.valueOf(screenSettings.getColors()));
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (advanced.getConsoleMode())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/admin");
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
switch (advanced.getSecurity())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
case 3: // NLA
|
|
Packit Service |
fa4841 |
args.add("/sec-nla");
|
|
Packit Service |
fa4841 |
break;
|
|
Packit Service |
fa4841 |
case 2: // TLS
|
|
Packit Service |
fa4841 |
args.add("/sec-tls");
|
|
Packit Service |
fa4841 |
break;
|
|
Packit Service |
fa4841 |
case 1: // RDP
|
|
Packit Service |
fa4841 |
args.add("/sec-rdp");
|
|
Packit Service |
fa4841 |
break;
|
|
Packit Service |
fa4841 |
default:
|
|
Packit Service |
fa4841 |
break;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (!certName.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/cert-name:" + certName);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
BookmarkBase.PerformanceFlags flags = bookmark.getActivePerformanceFlags();
|
|
Packit Service |
fa4841 |
if (flags.getRemoteFX())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/rfx");
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (flags.getGfx())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/gfx");
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (flags.getH264() && mHasH264)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/gfx:AVC444");
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add(addFlag("wallpaper", flags.getWallpaper()));
|
|
Packit Service |
fa4841 |
args.add(addFlag("window-drag", flags.getFullWindowDrag()));
|
|
Packit Service |
fa4841 |
args.add(addFlag("menu-anims", flags.getMenuAnimations()));
|
|
Packit Service |
fa4841 |
args.add(addFlag("themes", flags.getTheming()));
|
|
Packit Service |
fa4841 |
args.add(addFlag("fonts", flags.getFontSmoothing()));
|
|
Packit Service |
fa4841 |
args.add(addFlag("aero", flags.getDesktopComposition()));
|
|
Packit Service |
fa4841 |
args.add(addFlag("glyph-cache", false));
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (!advanced.getRemoteProgram().isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/shell:" + advanced.getRemoteProgram());
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (!advanced.getWorkDir().isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/shell-dir:" + advanced.getWorkDir());
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add(addFlag("async-channels", debug.getAsyncChannel()));
|
|
Packit Service |
fa4841 |
args.add(addFlag("async-input", debug.getAsyncInput()));
|
|
Packit Service |
fa4841 |
args.add(addFlag("async-update", debug.getAsyncUpdate()));
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (advanced.getRedirectSDCard())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
String path = android.os.Environment.getExternalStorageDirectory().getPath();
|
|
Packit Service |
fa4841 |
args.add("/drive:sdcard," + path);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add("/clipboard");
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
// Gateway enabled?
|
|
Packit Service |
fa4841 |
if (bookmark.getType() == BookmarkBase.TYPE_MANUAL &&
|
|
Packit Service |
fa4841 |
bookmark.<ManualBookmark>get().getEnableGatewaySettings())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
ManualBookmark.GatewaySettings gateway =
|
|
Packit Service |
fa4841 |
bookmark.<ManualBookmark>get().getGatewaySettings();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add(String.format("/g:%s:%d", gateway.getHostname(), gateway.getPort()));
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
arg = gateway.getUsername();
|
|
Packit Service |
fa4841 |
if (!arg.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/gu:" + arg);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
arg = gateway.getDomain();
|
|
Packit Service |
fa4841 |
if (!arg.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/gd:" + arg);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
arg = gateway.getPassword();
|
|
Packit Service |
fa4841 |
if (!arg.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/gp:" + arg);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
/* 0 ... local
|
|
Packit Service |
fa4841 |
1 ... remote
|
|
Packit Service |
fa4841 |
2 ... disable */
|
|
Packit Service |
fa4841 |
args.add("/audio-mode:" + String.valueOf(advanced.getRedirectSound()));
|
|
Packit Service |
fa4841 |
if (advanced.getRedirectSound() == 0)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/sound");
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (advanced.getRedirectMicrophone())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/microphone");
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add("/cert-ignore");
|
|
Packit Service |
fa4841 |
args.add("/log-level:" + debug.getDebugLevel());
|
|
Packit Service |
fa4841 |
String[] arrayArgs = args.toArray(new String[args.size()]);
|
|
Packit Service |
fa4841 |
return freerdp_parse_arguments(inst, arrayArgs);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean setConnectionInfo(Context context, long inst, Uri openUri)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
ArrayList<String> args = new ArrayList<>();
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
// Parse URI from query string. Same key overwrite previous one
|
|
Packit Service |
fa4841 |
// freerdp://user@ip:port/connect?sound=&rfx=&p=password&clipboard=%2b&themes=-
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
// Now we only support Software GDI
|
|
Packit Service |
fa4841 |
args.add(TAG);
|
|
Packit Service |
fa4841 |
args.add("/gdi:sw");
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
final String clientName = ApplicationSettingsActivity.getClientName(context);
|
|
Packit Service |
fa4841 |
if (!clientName.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/client-hostname:" + clientName);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
// Parse hostname and port. Set to 'v' argument
|
|
Packit Service |
fa4841 |
String hostname = openUri.getHost();
|
|
Packit Service |
fa4841 |
int port = openUri.getPort();
|
|
Packit Service |
fa4841 |
if (hostname != null)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
hostname = hostname + ((port == -1) ? "" : (":" + String.valueOf(port)));
|
|
Packit Service |
fa4841 |
args.add("/v:" + hostname);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
String user = openUri.getUserInfo();
|
|
Packit Service |
fa4841 |
if (user != null)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
args.add("/u:" + user);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
for (String key : openUri.getQueryParameterNames())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
String value = openUri.getQueryParameter(key);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
if (value.isEmpty())
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
// Query: key=
|
|
Packit Service |
fa4841 |
// To freerdp argument: /key
|
|
Packit Service |
fa4841 |
args.add("/" + key);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
else if (value.equals("-") || value.equals("+"))
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
// Query: key=- or key=+
|
|
Packit Service |
fa4841 |
// To freerdp argument: -key or +key
|
|
Packit Service |
fa4841 |
args.add(value + key);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
else
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
// Query: key=value
|
|
Packit Service |
fa4841 |
// To freerdp argument: /key:value
|
|
Packit Service |
fa4841 |
if (key.equals("drive") && value.equals("sdcard"))
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
// Special for sdcard redirect
|
|
Packit Service |
fa4841 |
String path = android.os.Environment.getExternalStorageDirectory().getPath();
|
|
Packit Service |
fa4841 |
value = "sdcard," + path;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
args.add("/" + key + ":" + value);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
String[] arrayArgs = args.toArray(new String[args.size()]);
|
|
Packit Service |
fa4841 |
return freerdp_parse_arguments(inst, arrayArgs);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean updateGraphics(long inst, Bitmap bitmap, int x, int y, int width,
|
|
Packit Service |
fa4841 |
int height)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_update_graphics(inst, bitmap, x, y, width, height);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean sendCursorEvent(long inst, int x, int y, int flags)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_send_cursor_event(inst, x, y, flags);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean sendKeyEvent(long inst, int keycode, boolean down)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_send_key_event(inst, keycode, down);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean sendUnicodeKeyEvent(long inst, int keycode, boolean down)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_send_unicodekey_event(inst, keycode, down);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static boolean sendClipboardData(long inst, String data)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_send_clipboard_data(inst, data);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnConnectionSuccess(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (listener != null)
|
|
Packit Service |
fa4841 |
listener.OnConnectionSuccess(inst);
|
|
Packit Service |
fa4841 |
synchronized (mInstanceState)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
mInstanceState.append(inst, true);
|
|
Packit Service |
fa4841 |
mInstanceState.notifyAll();
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnConnectionFailure(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (listener != null)
|
|
Packit Service |
fa4841 |
listener.OnConnectionFailure(inst);
|
|
Packit Service |
fa4841 |
synchronized (mInstanceState)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
mInstanceState.remove(inst);
|
|
Packit Service |
fa4841 |
mInstanceState.notifyAll();
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnPreConnect(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (listener != null)
|
|
Packit Service |
fa4841 |
listener.OnPreConnect(inst);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnDisconnecting(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (listener != null)
|
|
Packit Service |
fa4841 |
listener.OnDisconnecting(inst);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnDisconnected(long inst)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
if (listener != null)
|
|
Packit Service |
fa4841 |
listener.OnDisconnected(inst);
|
|
Packit Service |
fa4841 |
synchronized (mInstanceState)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
mInstanceState.remove(inst);
|
|
Packit Service |
fa4841 |
mInstanceState.notifyAll();
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnSettingsChanged(long inst, int width, int height, int bpp)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
SessionState s = GlobalApp.getSession(inst);
|
|
Packit Service |
fa4841 |
if (s == null)
|
|
Packit Service |
fa4841 |
return;
|
|
Packit Service |
fa4841 |
UIEventListener uiEventListener = s.getUIEventListener();
|
|
Packit Service |
fa4841 |
if (uiEventListener != null)
|
|
Packit Service |
fa4841 |
uiEventListener.OnSettingsChanged(width, height, bpp);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static boolean OnAuthenticate(long inst, StringBuilder username, StringBuilder domain,
|
|
Packit Service |
fa4841 |
StringBuilder password)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
SessionState s = GlobalApp.getSession(inst);
|
|
Packit Service |
fa4841 |
if (s == null)
|
|
Packit Service |
fa4841 |
return false;
|
|
Packit Service |
fa4841 |
UIEventListener uiEventListener = s.getUIEventListener();
|
|
Packit Service |
fa4841 |
if (uiEventListener != null)
|
|
Packit Service |
fa4841 |
return uiEventListener.OnAuthenticate(username, domain, password);
|
|
Packit Service |
fa4841 |
return false;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static boolean OnGatewayAuthenticate(long inst, StringBuilder username,
|
|
Packit Service |
fa4841 |
StringBuilder domain, StringBuilder password)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
SessionState s = GlobalApp.getSession(inst);
|
|
Packit Service |
fa4841 |
if (s == null)
|
|
Packit Service |
fa4841 |
return false;
|
|
Packit Service |
fa4841 |
UIEventListener uiEventListener = s.getUIEventListener();
|
|
Packit Service |
fa4841 |
if (uiEventListener != null)
|
|
Packit Service |
fa4841 |
return uiEventListener.OnGatewayAuthenticate(username, domain, password);
|
|
Packit Service |
fa4841 |
return false;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static int OnVerifyCertificate(long inst, String commonName, String subject,
|
|
Packit Service |
fa4841 |
String issuer, String fingerprint, boolean hostMismatch)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
SessionState s = GlobalApp.getSession(inst);
|
|
Packit Service |
fa4841 |
if (s == null)
|
|
Packit Service |
fa4841 |
return 0;
|
|
Packit Service |
fa4841 |
UIEventListener uiEventListener = s.getUIEventListener();
|
|
Packit Service |
fa4841 |
if (uiEventListener != null)
|
|
Packit Service |
fa4841 |
return uiEventListener.OnVerifiyCertificate(commonName, subject, issuer, fingerprint,
|
|
Packit Service |
fa4841 |
hostMismatch);
|
|
Packit Service |
fa4841 |
return 0;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static int OnVerifyChangedCertificate(long inst, String commonName, String subject,
|
|
Packit Service |
fa4841 |
String issuer, String fingerprint,
|
|
Packit Service |
fa4841 |
String oldSubject, String oldIssuer,
|
|
Packit Service |
fa4841 |
String oldFingerprint)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
SessionState s = GlobalApp.getSession(inst);
|
|
Packit Service |
fa4841 |
if (s == null)
|
|
Packit Service |
fa4841 |
return 0;
|
|
Packit Service |
fa4841 |
UIEventListener uiEventListener = s.getUIEventListener();
|
|
Packit Service |
fa4841 |
if (uiEventListener != null)
|
|
Packit Service |
fa4841 |
return uiEventListener.OnVerifyChangedCertificate(
|
|
Packit Service |
fa4841 |
commonName, subject, issuer, fingerprint, oldSubject, oldIssuer, oldFingerprint);
|
|
Packit Service |
fa4841 |
return 0;
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnGraphicsUpdate(long inst, int x, int y, int width, int height)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
SessionState s = GlobalApp.getSession(inst);
|
|
Packit Service |
fa4841 |
if (s == null)
|
|
Packit Service |
fa4841 |
return;
|
|
Packit Service |
fa4841 |
UIEventListener uiEventListener = s.getUIEventListener();
|
|
Packit Service |
fa4841 |
if (uiEventListener != null)
|
|
Packit Service |
fa4841 |
uiEventListener.OnGraphicsUpdate(x, y, width, height);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnGraphicsResize(long inst, int width, int height, int bpp)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
SessionState s = GlobalApp.getSession(inst);
|
|
Packit Service |
fa4841 |
if (s == null)
|
|
Packit Service |
fa4841 |
return;
|
|
Packit Service |
fa4841 |
UIEventListener uiEventListener = s.getUIEventListener();
|
|
Packit Service |
fa4841 |
if (uiEventListener != null)
|
|
Packit Service |
fa4841 |
uiEventListener.OnGraphicsResize(width, height, bpp);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
private static void OnRemoteClipboardChanged(long inst, String data)
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
SessionState s = GlobalApp.getSession(inst);
|
|
Packit Service |
fa4841 |
if (s == null)
|
|
Packit Service |
fa4841 |
return;
|
|
Packit Service |
fa4841 |
UIEventListener uiEventListener = s.getUIEventListener();
|
|
Packit Service |
fa4841 |
if (uiEventListener != null)
|
|
Packit Service |
fa4841 |
uiEventListener.OnRemoteClipboardChanged(data);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static String getVersion()
|
|
Packit Service |
fa4841 |
{
|
|
Packit Service |
fa4841 |
return freerdp_get_version();
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static interface EventListener {
|
|
Packit Service |
fa4841 |
void OnPreConnect(long instance);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
void OnConnectionSuccess(long instance);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
void OnConnectionFailure(long instance);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
void OnDisconnecting(long instance);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
void OnDisconnected(long instance);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
public static interface UIEventListener {
|
|
Packit Service |
fa4841 |
void OnSettingsChanged(int width, int height, int bpp);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
boolean OnAuthenticate(StringBuilder username, StringBuilder domain,
|
|
Packit Service |
fa4841 |
StringBuilder password);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
boolean OnGatewayAuthenticate(StringBuilder username, StringBuilder domain,
|
|
Packit Service |
fa4841 |
StringBuilder password);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
int OnVerifiyCertificate(String commonName, String subject, String issuer,
|
|
Packit Service |
fa4841 |
String fingerprint, boolean mismatch);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
int OnVerifyChangedCertificate(String commonName, String subject, String issuer,
|
|
Packit Service |
fa4841 |
String fingerprint, String oldSubject, String oldIssuer,
|
|
Packit Service |
fa4841 |
String oldFingerprint);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
void OnGraphicsUpdate(int x, int y, int width, int height);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
void OnGraphicsResize(int width, int height, int bpp);
|
|
Packit Service |
fa4841 |
|
|
Packit Service |
fa4841 |
void OnRemoteClipboardChanged(String data);
|
|
Packit Service |
fa4841 |
}
|
|
Packit Service |
fa4841 |
}
|