+
+JNIEXPORT void JNICALL
+Java_simgrid_msg_MsgNative_selectContextFactory(JNIEnv * env, jclass class,jstring jname)
+{
+ int rv;
+
+ /* get the C string from the java string*/
+ const char* name = (*env)->GetStringUTFChars(env, jname, 0);
+
+ rv = xbt_context_select_factory(name);
+
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+
+ if(rv)
+ jxbt_throw_native(env, xbt_strdup("xbt_select_context_factory() failed"));
+}
+
+JNIEXPORT void JNICALL
+Java_simgrid_msg_MsgNative_taskSend(JNIEnv* env, jclass cls,
+ jstring jalias, jobject jtask,
+ jdouble jtimeout) {
+
+ MSG_error_t rv;
+ const char* alias = (*env)->GetStringUTFChars(env, jalias, 0);
+
+ m_task_t task = jtask_to_native_task(jtask,env);
+
+
+ if(!task){
+ (*env)->ReleaseStringUTFChars(env, jalias, alias);
+ jxbt_throw_notbound(env,"task",jtask);
+ return;
+ }
+
+ rv = MSG_task_send_with_timeout(task,alias,(double)jtimeout);
+
+ (*env)->ReleaseStringUTFChars(env, jalias, alias);
+
+ if(MSG_OK != rv)
+ jxbt_throw_native(env, xbt_strdup("MSG_task_send_with_timeout() failed"));
+
+}
+
+JNIEXPORT void JNICALL
+Java_simgrid_msg_MsgNative_taskSendBounded(JNIEnv* env, jclass cls,
+ jstring jalias, jobject jtask,
+ jdouble jmaxRate) {
+ m_task_t task = jtask_to_native_task(jtask,env);
+ MSG_error_t rv;
+ const char* alias;
+
+ if(!task){
+ jxbt_throw_notbound(env,"task",jtask);
+ return;
+ }
+
+ alias = (*env)->GetStringUTFChars(env, jalias, 0);
+
+ rv = MSG_task_send_bounded(task,alias,(double)jmaxRate);
+
+ (*env)->ReleaseStringUTFChars(env, jalias, alias);
+
+ if(MSG_OK != rv)
+ jxbt_throw_native(env, xbt_strdup("MSG_task_send_bounded() failed"));
+}
+
+JNIEXPORT jobject JNICALL
+Java_simgrid_msg_MsgNative_taskReceive(JNIEnv* env, jclass cls,
+ jstring jalias, jdouble jtimeout, jobject jhost) {
+ MSG_error_t rv;
+ m_task_t task = NULL;
+ m_host_t host = NULL;
+ const char* alias;
+
+ if (jhost) {
+ host = jhost_get_native(env,jhost);
+
+ if(!host){
+ jxbt_throw_notbound(env,"host",jhost);
+ return NULL;
+ }
+ }
+
+ alias = (*env)->GetStringUTFChars(env, jalias, 0);
+
+ rv = MSG_task_receive_ext(&task,alias,(double)jtimeout,host);
+
+ (*env)->ReleaseStringUTFChars(env, jalias, alias);
+
+ if (MSG_OK != rv)
+ {
+ jxbt_throw_native(env, xbt_strdup("MSG_task_receive_ext() failed"));
+ return NULL;
+ }
+
+ return (jobject)task->data;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_simgrid_msg_MsgNative_taskListen(JNIEnv* env, jclass cls, jstring jalias) {
+
+ const char* alias;
+ int rv;
+
+ alias = (*env)->GetStringUTFChars(env, jalias, 0);
+
+ rv = MSG_task_listen(alias);
+
+ (*env)->ReleaseStringUTFChars(env, jalias, alias);
+
+ return (jboolean)rv;
+}
+
+JNIEXPORT jint JNICALL
+Java_simgrid_msg_MsgNative_taskListenFromHost(JNIEnv* env, jclass cls, jstring jalias, jobject jhost) {
+
+ int rv;
+ const char* alias;
+
+ m_host_t host = jhost_get_native(env,jhost);
+
+ if(!host){
+ jxbt_throw_notbound(env,"host",jhost);
+ return -1;
+ }
+
+ alias = (*env)->GetStringUTFChars(env, jalias, 0);
+
+ rv = MSG_task_listen_from_host(alias,host);
+
+ (*env)->ReleaseStringUTFChars(env, jalias, alias);
+
+ return (jint)rv;
+}
+
+JNIEXPORT jint JNICALL
+Java_simgrid_msg_MsgNative_taskListenFrom(JNIEnv* env, jclass cls, jstring jalias) {
+
+ int rv;
+ const char* alias = (*env)->GetStringUTFChars(env, jalias, 0);
+
+ rv = MSG_task_listen_from(alias);
+
+ (*env)->ReleaseStringUTFChars(env, jalias, alias);
+
+ return (jint)rv;
+}