From 50866c19891df7d5f9ea634e00ef807a05fb77f0 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 06:55:36 +0000 Subject: [PATCH 01/22] init --- .abapgit.xml | 10 ++++++++++ src/package.devc.xml | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 .abapgit.xml create mode 100644 src/package.devc.xml diff --git a/.abapgit.xml b/.abapgit.xml new file mode 100644 index 0000000..7c0506a --- /dev/null +++ b/.abapgit.xml @@ -0,0 +1,10 @@ + + + + + E + /src/ + PREFIX + + + diff --git a/src/package.devc.xml b/src/package.devc.xml new file mode 100644 index 0000000..3d9014b --- /dev/null +++ b/src/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + abapGit-ssh + + + + From 09dc0a215b318833cffed26a0295b53455c39e23 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Mon, 7 Feb 2022 08:00:11 +0100 Subject: [PATCH 02/22] add config --- abaplint.jsonc | 343 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 343 insertions(+) create mode 100644 abaplint.jsonc diff --git a/abaplint.jsonc b/abaplint.jsonc new file mode 100644 index 0000000..9087327 --- /dev/null +++ b/abaplint.jsonc @@ -0,0 +1,343 @@ +{ + "global": { + "files": "/src/**/*.*" + }, + "dependencies": [ + { + "url": "https://github.com/open-abap/open-abap", + "folder": "/open", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "open-abap", + "errorNamespace": "^(Z|Y|LCL_|TY_|LIF_)" + }, + "rules": { + "7bit_ascii": true, + "abapdoc": false, + "align_parameters": true, + "allowed_object_naming": true, + "allowed_object_types": false, + "ambiguous_statement": true, + "avoid_use": true, + "begin_end_names": true, + "begin_single_include": true, + "call_transaction_authority_check": true, + "cds_parser_error": true, + "chain_mainly_declarations": true, + "check_abstract": true, + "check_comments": false, + "check_ddic": true, + "check_include": true, + "check_no_handler_pragma": true, + "check_subrc": true, + "check_syntax": true, + "check_text_elements": true, + "check_transformation_exists": true, + "class_attribute_names": true, + "cloud_types": true, + "colon_missing_space": true, + "commented_code": true, + "constant_classes": { + "exclude": [], + "severity": "Error", + "mapping": [] + }, + "constructor_visibility_public": true, + "contains_tab": { + "exclude": [], + "severity": "Error", + "spaces": 1 + }, + "cyclic_oo": { + "exclude": [], + "severity": "Error", + "skip": [] + }, + "cyclomatic_complexity": { + "exclude": [], + "severity": "Error", + "max": 20 + }, + "dangerous_statement": { + "exclude": [], + "severity": "Error", + "execSQL": true, + "kernelCall": true, + "systemCall": true, + "insertReport": true, + "generateDynpro": true, + "generateReport": true, + "generateSubroutine": true, + "deleteReport": true, + "deleteTextpool": true, + "deleteDynpro": true, + "importDynpro": true, + "dynamicSQL": true + }, + "db_operation_in_loop": true, + "definitions_top": true, + "description_empty": true, + "double_space": { + "exclude": [], + "severity": "Error", + "keywords": true, + "startParen": true, + "endParen": true, + "afterColon": true + }, + "downport": true, + "empty_line_in_statement": { + "exclude": [], + "severity": "Error", + "allowChained": false + }, + "empty_statement": true, + "empty_structure": { + "exclude": [], + "severity": "Error", + "loop": true, + "if": true, + "while": true, + "case": true, + "select": true, + "do": true, + "at": true, + "try": true + }, + "exit_or_check": { + "exclude": [], + "severity": "Error", + "allowExit": false, + "allowCheck": false + }, + "exporting": true, + "forbidden_identifier": { + "exclude": [], + "severity": "Error", + "check": [] + }, + "forbidden_pseudo_and_pragma": { + "exclude": [], + "severity": "Error", + "pseudo": [], + "pragmas": [], + "ignoreGlobalClassDefinition": false, + "ignoreGlobalInterface": false + }, + "forbidden_void_type": { + "exclude": [], + "severity": "Error", + "check": [] + }, + "form_tables_obsolete": true, + "fully_type_constants": true, + "function_module_recommendations": true, + "functional_writing": { + "exclude": [], + "severity": "Error", + "ignoreExceptions": true + }, + "global_class": true, + "identical_conditions": true, + "identical_contents": true, + "identical_descriptions": true, + "identical_form_names": true, + "if_in_if": true, + "implement_methods": true, + "in_statement_indentation": { + "exclude": [], + "severity": "Error", + "blockStatements": 2, + "ignoreExceptions": true + }, + "indentation": { + "exclude": [], + "severity": "Error", + "ignoreExceptions": true, + "alignTryCatch": false, + "selectionScreenBlockIndentation": false, + "globalClassSkipFirst": false, + "ignoreGlobalClassDefinition": false, + "ignoreGlobalInterface": false + }, + "inline_data_old_versions": true, + "intf_referencing_clas": { + "exclude": [], + "severity": "Error", + "allow": [] + }, + "keep_single_parameter_on_one_line": { + "exclude": [], + "severity": "Error", + "length": 120 + }, + "keyword_case": { + "exclude": [], + "severity": "Error", + "style": "upper", + "ignoreExceptions": true, + "ignoreLowerClassImplmentationStatement": true, + "ignoreGlobalClassDefinition": false, + "ignoreGlobalInterface": false, + "ignoreFunctionModuleName": false, + "ignoreGlobalClassBoundaries": false, + "ignoreKeywords": [] + }, + "line_break_multiple_parameters": { + "exclude": [], + "severity": "Error", + "count": 1 + }, + "line_break_style": true, + "line_length": { + "exclude": [], + "severity": "Error", + "length": 120 + }, + "line_only_punc": { + "exclude": [], + "severity": "Error", + "ignoreExceptions": true + }, + "local_class_naming": { + "exclude": [], + "severity": "Error", + "patternKind": "required", + "ignoreNames": [], + "ignorePatterns": [], + "local": "^LCL_.+$", + "exception": "^LCX_.+$", + "test": "^LTCL_.+$" + }, + "local_testclass_location": true, + "local_variable_names": { + "exclude": [], + "severity": "Error", + "patternKind": "required", + "ignoreNames": [], + "ignorePatterns": [], + "expectedData": "^L._.+$", + "expectedConstant": "^LC_.+$", + "expectedFS": "^$" + }, + "main_file_contents": true, + "many_parentheses": true, + "max_one_method_parameter_per_line": true, + "max_one_statement": true, + "message_exists": true, + "method_implemented_twice": true, + "method_length": { + "exclude": [], + "severity": "Error", + "statements": 100, + "errorWhenEmpty": true, + "ignoreTestClasses": false, + "checkForms": true + }, + "method_overwrites_builtin": true, + "method_parameter_names": true, + "mix_returning": true, + "modify_only_own_db_tables": true, + "msag_consistency": true, + "names_no_dash": true, + "nesting": true, + "newline_between_methods": true, + "no_aliases": true, + "no_chained_assignment": true, + "no_public_attributes": { + "exclude": [], + "severity": "Error", + "allowReadOnly": false + }, + "no_yoda_conditions": { + "exclude": [], + "severity": "Error", + "onlyConstants": false + }, + "object_naming": { + "exclude": [], + "severity": "Error", + "patternKind": "required", + "ignoreNames": [], + "ignorePatterns": [], + "clas": "^ZC(L|X)", + "intf": "^ZIF", + "prog": "^Z", + "fugr": "^Z", + "tabl": "^Z", + "ttyp": "^Z", + "dtel": "^Z", + "doma": "^Z", + "msag": "^Z", + "tran": "^Z", + "enqu": "^EZ", + "auth": "^Z", + "pinf": "^Z", + "idoc": "^Z", + "xslt": "^Z", + "ssfo": "^Z", + "ssst": "^Z", + "shlp": "^Z" + }, + "obsolete_statement": true, + "omit_parameter_name": true, + "omit_preceding_zeros": true, + "omit_receiving": true, + "parser_702_chaining": true, + "parser_error": true, + "parser_missing_space": true, + "pragma_placement": true, + "prefer_corresponding": true, + "prefer_inline": true, + "prefer_is_not": true, + "prefer_raise_exception_new": true, + "prefer_returning_to_exporting": true, + "prefer_xsdbool": true, + "preferred_compare_operator": true, + "prefix_is_current_class": true, + "reduce_string_templates": true, + "release_idoc": true, + "remove_descriptions": true, + "rfc_error_handling": true, + "select_add_order_by": true, + "select_performance": true, + "selection_screen_naming": true, + "sequential_blank": true, + "short_case": true, + "sicf_consistency": true, + "space_before_colon": true, + "space_before_dot": { + "exclude": [], + "severity": "Error", + "ignoreGlobalDefinition": true, + "ignoreExceptions": true + }, + "sql_escape_host_variables": true, + "start_at_tab": true, + "static_call_via_instance": true, + "superclass_final": true, + "sy_modification": true, + "tabl_enhancement_category": true, + "try_without_catch": true, + "type_form_parameters": true, + "types_naming": true, + "uncaught_exception": true, + "unknown_types": true, + "unnecessary_chaining": true, + "unreachable_code": true, + "unsecure_fae": true, + "unused_ddic": true, + "unused_methods": true, + "unused_types": true, + "unused_variables": true, + "use_bool_expression": true, + "use_class_based_exceptions": true, + "use_line_exists": true, + "use_new": true, + "when_others_last": true, + "whitespace_end": true, + "xml_consistency": true + } +} From 2ad440bde840011f7fe33d6c9842dd5c6ecb549a Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 07:17:58 +0000 Subject: [PATCH 03/22] blargh --- src/zabapgit_test_ssh.prog.abap | 12 +++++ src/zabapgit_test_ssh.prog.xml | 21 +++++++++ src/zcl_abapgit_ssh.clas.abap | 84 +++++++++++++++++++++++++++++++++ src/zcl_abapgit_ssh.clas.xml | 16 +++++++ 4 files changed, 133 insertions(+) create mode 100644 src/zabapgit_test_ssh.prog.abap create mode 100644 src/zabapgit_test_ssh.prog.xml create mode 100644 src/zcl_abapgit_ssh.clas.abap create mode 100644 src/zcl_abapgit_ssh.clas.xml diff --git a/src/zabapgit_test_ssh.prog.abap b/src/zabapgit_test_ssh.prog.abap new file mode 100644 index 0000000..ab65215 --- /dev/null +++ b/src/zabapgit_test_ssh.prog.abap @@ -0,0 +1,12 @@ +REPORT zabapgit_test_ssh. + +START-OF-SELECTION. + PERFORM run. + +FORM run. + + zcl_abapgit_ssh=>connect( + iv_host = 'github.com' + iv_port = '22' ). + +ENDFORM. diff --git a/src/zabapgit_test_ssh.prog.xml b/src/zabapgit_test_ssh.prog.xml new file mode 100644 index 0000000..10901b4 --- /dev/null +++ b/src/zabapgit_test_ssh.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZABAPGIT_TEST_SSH + 1 + E + X + X + + + + R + test + 4 + + + + + diff --git a/src/zcl_abapgit_ssh.clas.abap b/src/zcl_abapgit_ssh.clas.abap new file mode 100644 index 0000000..624a297 --- /dev/null +++ b/src/zcl_abapgit_ssh.clas.abap @@ -0,0 +1,84 @@ +CLASS zcl_abapgit_ssh DEFINITION PUBLIC CREATE PRIVATE. + PUBLIC SECTION. + INTERFACES if_apc_wsp_event_handler. + CLASS-METHODS connect + IMPORTING + iv_host TYPE string + iv_port TYPE string + RAISING + cx_static_check. + PROTECTED SECTION. + PRIVATE SECTION. + DATA mi_client TYPE REF TO if_apc_wsp_client. + DATA mv_on_message TYPE xstring. + METHODS send + IMPORTING + iv_message TYPE xstring + RAISING + cx_apc_error. +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_SSH IMPLEMENTATION. + + + METHOD connect. + DATA ls_frame TYPE if_abap_channel_types=>ty_apc_tcp_frame. + + DATA(lo_ssh) = NEW zcl_abapgit_ssh( ). + +* todo, set ls_frame + + lo_ssh->mi_client = cl_apc_tcp_client_manager=>create( + i_host = iv_host + i_port = iv_port + i_frame = ls_frame + i_event_handler = lo_ssh ). + + lo_ssh->mi_client->connect( ). + + ENDMETHOD. + + + METHOD if_apc_wsp_event_handler~on_close. + WRITE / 'on_close'. + ENDMETHOD. + + + METHOD if_apc_wsp_event_handler~on_error. + WRITE / 'on_error'. + ENDMETHOD. + + + METHOD if_apc_wsp_event_handler~on_message. + WRITE / 'on_message, received:'. + TRY. + mv_on_message = i_message->get_binary( ). + CATCH cx_root. + ENDTRY. + WRITE / mv_on_message. + ENDMETHOD. + + + METHOD if_apc_wsp_event_handler~on_open. + WRITE / 'on_open'. + ENDMETHOD. + + + METHOD send. + + DATA li_message_manager TYPE REF TO if_apc_wsp_message_manager. + DATA li_message TYPE REF TO if_apc_wsp_message. + + li_message_manager ?= mi_client->get_message_manager( ). + li_message = li_message_manager->create_message( ). + li_message->set_binary( iv_message ). + li_message_manager->send( li_message ). + + WAIT FOR PUSH CHANNELS + UNTIL mv_on_message IS NOT INITIAL + UP TO 10 SECONDS. + + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_abapgit_ssh.clas.xml b/src/zcl_abapgit_ssh.clas.xml new file mode 100644 index 0000000..372ebad --- /dev/null +++ b/src/zcl_abapgit_ssh.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_SSH + E + abapGit - ssh test + 1 + X + X + X + + + + From 21d3ad3f052d24a80b4bb437276a59fdaa149976 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 08:45:59 +0000 Subject: [PATCH 04/22] update --- src/zcl_abapgit_ssh.clas.abap | 51 ++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/src/zcl_abapgit_ssh.clas.abap b/src/zcl_abapgit_ssh.clas.abap index 624a297..89ab4f9 100644 --- a/src/zcl_abapgit_ssh.clas.abap +++ b/src/zcl_abapgit_ssh.clas.abap @@ -3,19 +3,21 @@ CLASS zcl_abapgit_ssh DEFINITION PUBLIC CREATE PRIVATE. INTERFACES if_apc_wsp_event_handler. CLASS-METHODS connect IMPORTING - iv_host TYPE string - iv_port TYPE string + iv_host TYPE string + iv_port TYPE string RAISING cx_static_check. PROTECTED SECTION. PRIVATE SECTION. - DATA mi_client TYPE REF TO if_apc_wsp_client. - DATA mv_on_message TYPE xstring. + + DATA mi_client TYPE REF TO if_apc_wsp_client . + DATA mv_buffer TYPE xstring . + METHODS send IMPORTING - iv_message TYPE xstring + !iv_message TYPE xstring RAISING - cx_apc_error. + cx_apc_error . ENDCLASS. @@ -24,11 +26,12 @@ CLASS ZCL_ABAPGIT_SSH IMPLEMENTATION. METHOD connect. - DATA ls_frame TYPE if_abap_channel_types=>ty_apc_tcp_frame. DATA(lo_ssh) = NEW zcl_abapgit_ssh( ). -* todo, set ls_frame + DATA(ls_frame) = VALUE apc_tcp_frame( + frame_type = if_apc_tcp_frame_types=>co_frame_type_fixed_length + fixed_length = 1 ). lo_ssh->mi_client = cl_apc_tcp_client_manager=>create( i_host = iv_host @@ -42,27 +45,37 @@ CLASS ZCL_ABAPGIT_SSH IMPLEMENTATION. METHOD if_apc_wsp_event_handler~on_close. + BREAK-POINT. WRITE / 'on_close'. ENDMETHOD. METHOD if_apc_wsp_event_handler~on_error. + BREAK-POINT. WRITE / 'on_error'. ENDMETHOD. METHOD if_apc_wsp_event_handler~on_message. - WRITE / 'on_message, received:'. TRY. - mv_on_message = i_message->get_binary( ). + DATA(lv_message) = i_message->get_binary( ). CATCH cx_root. ENDTRY. - WRITE / mv_on_message. + mv_buffer = mv_buffer && lv_message. + IF xstrlen( mv_buffer ) >= 24. + BREAK-POINT. + ENDIF. ENDMETHOD. METHOD if_apc_wsp_event_handler~on_open. WRITE / 'on_open'. + +* https://datatracker.ietf.org/doc/html/rfc4253#section-4.2 + DATA(lv_xstr) = cl_abap_codepage=>convert_to( 'SSH-2.0-abap' && cl_abap_char_utilities=>cr_lf ). + + send( lv_xstr ). + ENDMETHOD. @@ -70,15 +83,21 @@ CLASS ZCL_ABAPGIT_SSH IMPLEMENTATION. DATA li_message_manager TYPE REF TO if_apc_wsp_message_manager. DATA li_message TYPE REF TO if_apc_wsp_message. + DATA lv_index TYPE i. + DATA lv_hex TYPE xstring. li_message_manager ?= mi_client->get_message_manager( ). + li_message = li_message_manager->create_message( ). - li_message->set_binary( iv_message ). - li_message_manager->send( li_message ). - WAIT FOR PUSH CHANNELS - UNTIL mv_on_message IS NOT INITIAL - UP TO 10 SECONDS. + ASSERT NOT iv_message IS INITIAL. + + DO xstrlen( iv_message ) TIMES. + lv_index = sy-index - 1. + lv_hex = iv_message+lv_index(1). + li_message->set_binary( lv_hex ). + li_message_manager->send( li_message ). + ENDDO. ENDMETHOD. ENDCLASS. From 5a05b50483de2ff9e9e33a655ae79ed6822fd0bc Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 09:20:12 +0000 Subject: [PATCH 05/22] rename --- src/zcl_abapgit_ssh.clas.abap | 103 ------------- src/zcl_oassh.clas.abap | 143 ++++++++++++++++++ ...bapgit_ssh.clas.xml => zcl_oassh.clas.xml} | 4 +- src/zcl_oassh_message_20.clas.abap | 14 ++ src/zcl_oassh_message_20.clas.xml | 16 ++ ...st_ssh.prog.abap => ztest_oassh.prog.abap} | 6 +- ...test_ssh.prog.xml => ztest_oassh.prog.xml} | 2 +- 7 files changed, 179 insertions(+), 109 deletions(-) delete mode 100644 src/zcl_abapgit_ssh.clas.abap create mode 100644 src/zcl_oassh.clas.abap rename src/{zcl_abapgit_ssh.clas.xml => zcl_oassh.clas.xml} (82%) create mode 100644 src/zcl_oassh_message_20.clas.abap create mode 100644 src/zcl_oassh_message_20.clas.xml rename src/{zabapgit_test_ssh.prog.abap => ztest_oassh.prog.abap} (56%) rename src/{zabapgit_test_ssh.prog.xml => ztest_oassh.prog.xml} (93%) diff --git a/src/zcl_abapgit_ssh.clas.abap b/src/zcl_abapgit_ssh.clas.abap deleted file mode 100644 index 89ab4f9..0000000 --- a/src/zcl_abapgit_ssh.clas.abap +++ /dev/null @@ -1,103 +0,0 @@ -CLASS zcl_abapgit_ssh DEFINITION PUBLIC CREATE PRIVATE. - PUBLIC SECTION. - INTERFACES if_apc_wsp_event_handler. - CLASS-METHODS connect - IMPORTING - iv_host TYPE string - iv_port TYPE string - RAISING - cx_static_check. - PROTECTED SECTION. - PRIVATE SECTION. - - DATA mi_client TYPE REF TO if_apc_wsp_client . - DATA mv_buffer TYPE xstring . - - METHODS send - IMPORTING - !iv_message TYPE xstring - RAISING - cx_apc_error . -ENDCLASS. - - - -CLASS ZCL_ABAPGIT_SSH IMPLEMENTATION. - - - METHOD connect. - - DATA(lo_ssh) = NEW zcl_abapgit_ssh( ). - - DATA(ls_frame) = VALUE apc_tcp_frame( - frame_type = if_apc_tcp_frame_types=>co_frame_type_fixed_length - fixed_length = 1 ). - - lo_ssh->mi_client = cl_apc_tcp_client_manager=>create( - i_host = iv_host - i_port = iv_port - i_frame = ls_frame - i_event_handler = lo_ssh ). - - lo_ssh->mi_client->connect( ). - - ENDMETHOD. - - - METHOD if_apc_wsp_event_handler~on_close. - BREAK-POINT. - WRITE / 'on_close'. - ENDMETHOD. - - - METHOD if_apc_wsp_event_handler~on_error. - BREAK-POINT. - WRITE / 'on_error'. - ENDMETHOD. - - - METHOD if_apc_wsp_event_handler~on_message. - TRY. - DATA(lv_message) = i_message->get_binary( ). - CATCH cx_root. - ENDTRY. - mv_buffer = mv_buffer && lv_message. - IF xstrlen( mv_buffer ) >= 24. - BREAK-POINT. - ENDIF. - ENDMETHOD. - - - METHOD if_apc_wsp_event_handler~on_open. - WRITE / 'on_open'. - -* https://datatracker.ietf.org/doc/html/rfc4253#section-4.2 - DATA(lv_xstr) = cl_abap_codepage=>convert_to( 'SSH-2.0-abap' && cl_abap_char_utilities=>cr_lf ). - - send( lv_xstr ). - - ENDMETHOD. - - - METHOD send. - - DATA li_message_manager TYPE REF TO if_apc_wsp_message_manager. - DATA li_message TYPE REF TO if_apc_wsp_message. - DATA lv_index TYPE i. - DATA lv_hex TYPE xstring. - - li_message_manager ?= mi_client->get_message_manager( ). - - li_message = li_message_manager->create_message( ). - - ASSERT NOT iv_message IS INITIAL. - - DO xstrlen( iv_message ) TIMES. - lv_index = sy-index - 1. - lv_hex = iv_message+lv_index(1). - li_message->set_binary( lv_hex ). - li_message_manager->send( li_message ). - ENDDO. - - ENDMETHOD. -ENDCLASS. diff --git a/src/zcl_oassh.clas.abap b/src/zcl_oassh.clas.abap new file mode 100644 index 0000000..6c5bcc2 --- /dev/null +++ b/src/zcl_oassh.clas.abap @@ -0,0 +1,143 @@ +class ZCL_OASSH definition + public + create private . + +public section. + + interfaces IF_APC_WSP_EVENT_HANDLER . + interfaces IF_APC_WSP_EVENT_HANDLER_BASE . + + class-methods CONNECT + importing + !IV_HOST type STRING + !IV_PORT type STRING + raising + CX_STATIC_CHECK . + PROTECTED SECTION. +PRIVATE SECTION. + + CONSTANTS: + BEGIN OF gc_state, + protocol_version_exchange TYPE i VALUE 1, + key_exchange TYPE i VALUE 2, + END OF gc_state . + DATA mi_client TYPE REF TO if_apc_wsp_client . + DATA mv_buffer TYPE xstring . + DATA mv_state TYPE i . + + METHODS handle . + METHODS send + IMPORTING + !iv_message TYPE xstring + RAISING + cx_apc_error . +ENDCLASS. + + + +CLASS ZCL_OASSH IMPLEMENTATION. + + + METHOD connect. + + DATA(lo_ssh) = NEW zcl_oassh( ). + + DATA(ls_frame) = VALUE apc_tcp_frame( + frame_type = if_apc_tcp_frame_types=>co_frame_type_fixed_length + fixed_length = 1 ). + + lo_ssh->mi_client = cl_apc_tcp_client_manager=>create( + i_host = iv_host + i_port = iv_port + i_frame = ls_frame + i_event_handler = lo_ssh ). + + lo_ssh->mi_client->connect( ). + + ENDMETHOD. + + + METHOD HANDLE. + + DATA lv_remote_version TYPE string. + + CASE mv_state. + WHEN gc_state-protocol_version_exchange. + IF mv_buffer CP |*{ cl_abap_codepage=>convert_to( |{ cl_abap_char_utilities=>cr_lf }| ) }|. + lv_remote_version = cl_abap_codepage=>convert_from( mv_buffer ). + CLEAR mv_buffer. + mv_state = gc_state-key_exchange. + ENDIF. + WHEN gc_state-key_exchange. +* todo, check buffer contains a full packet, and return the packet payload +* https://datatracker.ietf.org/doc/html/rfc4253#section-7 +* name-lists of supported algorithms + ENDCASE. + + ENDMETHOD. + + + METHOD IF_APC_WSP_EVENT_HANDLER~ON_CLOSE. + BREAK-POINT. + WRITE / 'on_close'. + ENDMETHOD. + + + METHOD IF_APC_WSP_EVENT_HANDLER~ON_ERROR. + BREAK-POINT. + WRITE / 'on_error'. + ENDMETHOD. + + + METHOD IF_APC_WSP_EVENT_HANDLER~ON_MESSAGE. + DATA lv_message TYPE xstring. + + TRY. + lv_message = i_message->get_binary( ). + CATCH cx_root. + ENDTRY. + mv_buffer = mv_buffer && lv_message. + + handle( ). + + ENDMETHOD. + + + METHOD IF_APC_WSP_EVENT_HANDLER~ON_OPEN. + DATA lv_xstr TYPE xstring. + + WRITE / 'on_open'. + +* https://datatracker.ietf.org/doc/html/rfc4253#section-4.2 + + lv_xstr = cl_abap_codepage=>convert_to( 'SSH-2.0-abap' && cl_abap_char_utilities=>cr_lf ). + + send( lv_xstr ). + + mv_state = gc_state-protocol_version_exchange. + + ENDMETHOD. + + + METHOD SEND. + + DATA li_message_manager TYPE REF TO if_apc_wsp_message_manager. + DATA li_message TYPE REF TO if_apc_wsp_message. + DATA lv_index TYPE i. + DATA lv_hex TYPE xstring. + + li_message_manager ?= mi_client->get_message_manager( ). + + li_message = li_message_manager->create_message( ). + + ASSERT NOT iv_message IS INITIAL. + + DO xstrlen( iv_message ) TIMES. + lv_index = sy-index - 1. + lv_hex = iv_message+lv_index(1). + li_message->set_binary( lv_hex ). + li_message_manager->send( li_message ). + ENDDO. + + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_abapgit_ssh.clas.xml b/src/zcl_oassh.clas.xml similarity index 82% rename from src/zcl_abapgit_ssh.clas.xml rename to src/zcl_oassh.clas.xml index 372ebad..0aa13ed 100644 --- a/src/zcl_abapgit_ssh.clas.xml +++ b/src/zcl_oassh.clas.xml @@ -3,9 +3,9 @@ - ZCL_ABAPGIT_SSH + ZCL_OASSH E - abapGit - ssh test + ssh test 1 X X diff --git a/src/zcl_oassh_message_20.clas.abap b/src/zcl_oassh_message_20.clas.abap new file mode 100644 index 0000000..6be055a --- /dev/null +++ b/src/zcl_oassh_message_20.clas.abap @@ -0,0 +1,14 @@ +class ZCL_OASSH_MESSAGE_20 definition + public + final + create public . + +public section. +protected section. +private section. +ENDCLASS. + + + +CLASS ZCL_OASSH_MESSAGE_20 IMPLEMENTATION. +ENDCLASS. diff --git a/src/zcl_oassh_message_20.clas.xml b/src/zcl_oassh_message_20.clas.xml new file mode 100644 index 0000000..500f03c --- /dev/null +++ b/src/zcl_oassh_message_20.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_OASSH_MESSAGE_20 + E + SSH_MSG_KEXINIT - 20 + 1 + X + X + X + + + + diff --git a/src/zabapgit_test_ssh.prog.abap b/src/ztest_oassh.prog.abap similarity index 56% rename from src/zabapgit_test_ssh.prog.abap rename to src/ztest_oassh.prog.abap index ab65215..5faca63 100644 --- a/src/zabapgit_test_ssh.prog.abap +++ b/src/ztest_oassh.prog.abap @@ -1,11 +1,11 @@ -REPORT zabapgit_test_ssh. +REPORT ztest_oassh. START-OF-SELECTION. PERFORM run. -FORM run. +FORM run raising cx_static_check. - zcl_abapgit_ssh=>connect( + zcl_oassh=>connect( iv_host = 'github.com' iv_port = '22' ). diff --git a/src/zabapgit_test_ssh.prog.xml b/src/ztest_oassh.prog.xml similarity index 93% rename from src/zabapgit_test_ssh.prog.xml rename to src/ztest_oassh.prog.xml index 10901b4..bebbd41 100644 --- a/src/zabapgit_test_ssh.prog.xml +++ b/src/ztest_oassh.prog.xml @@ -3,7 +3,7 @@ - ZABAPGIT_TEST_SSH + ZTEST_OASSH 1 E X From b3d52d43c9c0797e6b9ebf2246770f87b83f6abb Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 10:38:28 +0000 Subject: [PATCH 06/22] update --- src/zcl_oassh_message_20.clas.abap | 58 ++++++++++++++++--- src/zcl_oassh_stream.clas.abap | 67 ++++++++++++++++++++++ src/zcl_oassh_stream.clas.testclasses.abap | 25 ++++++++ src/zcl_oassh_stream.clas.xml | 17 ++++++ 4 files changed, 159 insertions(+), 8 deletions(-) create mode 100644 src/zcl_oassh_stream.clas.abap create mode 100644 src/zcl_oassh_stream.clas.testclasses.abap create mode 100644 src/zcl_oassh_stream.clas.xml diff --git a/src/zcl_oassh_message_20.clas.abap b/src/zcl_oassh_message_20.clas.abap index 6be055a..bc6892e 100644 --- a/src/zcl_oassh_message_20.clas.abap +++ b/src/zcl_oassh_message_20.clas.abap @@ -1,14 +1,56 @@ -class ZCL_OASSH_MESSAGE_20 definition - public - final - create public . - -public section. -protected section. -private section. +CLASS zcl_oassh_message_20 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + TYPES: BEGIN OF ty_data, + message_id TYPE x LENGTH 1, + cookie TYPE x LENGTH 16, + kex_algorithms TYPE string_table, + server_host_key_algorithms TYPE string_table, + encryption_algorithms_c_to_s TYPE string_table, + encryption_algorithms_s_to_c TYPE string_table, + mac_algorithms_c_to_s TYPE string_table, + mac_algorithms_s_to_c TYPE string_table, + compression_algorithms_c_to_s TYPE string_table, + compression_algorithms_s_to_c TYPE string_table, + languages_c_to_s TYPE string_table, + languages_s_to_c TYPE string_table, + first_kex_packet_follows TYPE abap_bool, + reserved TYPE i, + END OF ty_data. + + METHODS get_raw RETURNING VALUE(rv_raw) TYPE xstring. + METHODS set_raw IMPORTING iv_raw TYPE xstring. + METHODS get_data RETURNING VALUE(rs_data) TYPE ty_data. + METHODS set_data IMPORTING is_data TYPE ty_data. + PROTECTED SECTION. + PRIVATE SECTION. ENDCLASS. CLASS ZCL_OASSH_MESSAGE_20 IMPLEMENTATION. + + + METHOD get_data. +* todo + ENDMETHOD. + + + METHOD get_raw. +* todo + ENDMETHOD. + + + METHOD set_data. +* todo + ENDMETHOD. + + + METHOD set_raw. +* todo + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_oassh_stream.clas.abap b/src/zcl_oassh_stream.clas.abap new file mode 100644 index 0000000..5b6b831 --- /dev/null +++ b/src/zcl_oassh_stream.clas.abap @@ -0,0 +1,67 @@ +CLASS zcl_oassh_stream DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + METHODS constructor + IMPORTING iv_hex TYPE xstring OPTIONAL. + + METHODS get + RETURNING VALUE(rv_hex) TYPE xstring. + + METHODS name_list_encode + IMPORTING + !it_list TYPE string_table. + + METHODS name_list_decode + RETURNING + VALUE(rt_list) TYPE string_table. + + METHODS uint32_encode + IMPORTING iv_int TYPE i. + + METHODS uint32_decode + RETURNING VALUE(rv_int) TYPE i. + + PROTECTED SECTION. + PRIVATE SECTION. + DATA mv_hex TYPE xstring. +ENDCLASS. + + + +CLASS ZCL_OASSH_STREAM IMPLEMENTATION. + + + METHOD constructor. + mv_hex = iv_hex. + ENDMETHOD. + + + METHOD get. + rv_hex = mv_hex. + ENDMETHOD. + + + METHOD name_list_decode. +* https://datatracker.ietf.org/doc/html/rfc4251#section-5 + + ENDMETHOD. + + + METHOD name_list_encode. +* https://datatracker.ietf.org/doc/html/rfc4251#section-5 + + ENDMETHOD. + + + METHOD uint32_decode. + + ENDMETHOD. + + + METHOD uint32_encode. + + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_oassh_stream.clas.testclasses.abap b/src/zcl_oassh_stream.clas.testclasses.abap new file mode 100644 index 0000000..eb2714d --- /dev/null +++ b/src/zcl_oassh_stream.clas.testclasses.abap @@ -0,0 +1,25 @@ +CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. + + PRIVATE SECTION. + DATA mo_stream TYPE REF TO zcl_oassh_stream. + METHODS setup. + METHODS name_list FOR TESTING RAISING cx_static_check. + METHODS unit32 FOR TESTING RAISING cx_static_check. +ENDCLASS. + + +CLASS ltcl_test IMPLEMENTATION. + + METHOD setup. + CREATE OBJECT mo_stream. + ENDMETHOD. + + METHOD name_list. + + ENDMETHOD. + + METHOD unit32. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zcl_oassh_stream.clas.xml b/src/zcl_oassh_stream.clas.xml new file mode 100644 index 0000000..ff04caf --- /dev/null +++ b/src/zcl_oassh_stream.clas.xml @@ -0,0 +1,17 @@ + + + + + + ZCL_OASSH_STREAM + E + message + 1 + X + X + X + X + + + + From d606df2dd6b8b115480ca64c42954e902c343513 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 11:50:48 +0000 Subject: [PATCH 07/22] pp --- src/zcl_oassh.clas.abap | 69 ++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/src/zcl_oassh.clas.abap b/src/zcl_oassh.clas.abap index 6c5bcc2..2367a61 100644 --- a/src/zcl_oassh.clas.abap +++ b/src/zcl_oassh.clas.abap @@ -1,36 +1,35 @@ -class ZCL_OASSH definition - public - create private . +CLASS zcl_oassh DEFINITION + PUBLIC + CREATE PRIVATE . -public section. + PUBLIC SECTION. - interfaces IF_APC_WSP_EVENT_HANDLER . - interfaces IF_APC_WSP_EVENT_HANDLER_BASE . + INTERFACES if_apc_wsp_event_handler . - class-methods CONNECT - importing - !IV_HOST type STRING - !IV_PORT type STRING - raising - CX_STATIC_CHECK . + CLASS-METHODS connect + IMPORTING + !iv_host TYPE string + !iv_port TYPE string + RAISING + cx_static_check . PROTECTED SECTION. -PRIVATE SECTION. - - CONSTANTS: - BEGIN OF gc_state, - protocol_version_exchange TYPE i VALUE 1, - key_exchange TYPE i VALUE 2, - END OF gc_state . - DATA mi_client TYPE REF TO if_apc_wsp_client . - DATA mv_buffer TYPE xstring . - DATA mv_state TYPE i . - - METHODS handle . - METHODS send - IMPORTING - !iv_message TYPE xstring - RAISING - cx_apc_error . + PRIVATE SECTION. + + CONSTANTS: + BEGIN OF gc_state, + protocol_version_exchange TYPE i VALUE 1, + key_exchange TYPE i VALUE 2, + END OF gc_state . + DATA mi_client TYPE REF TO if_apc_wsp_client . + DATA mv_buffer TYPE xstring . + DATA mv_state TYPE i . + + METHODS handle . + METHODS send + IMPORTING + !iv_message TYPE xstring + RAISING + cx_apc_error . ENDCLASS. @@ -57,7 +56,7 @@ CLASS ZCL_OASSH IMPLEMENTATION. ENDMETHOD. - METHOD HANDLE. + METHOD handle. DATA lv_remote_version TYPE string. @@ -77,19 +76,19 @@ CLASS ZCL_OASSH IMPLEMENTATION. ENDMETHOD. - METHOD IF_APC_WSP_EVENT_HANDLER~ON_CLOSE. + METHOD if_apc_wsp_event_handler~on_close. BREAK-POINT. WRITE / 'on_close'. ENDMETHOD. - METHOD IF_APC_WSP_EVENT_HANDLER~ON_ERROR. + METHOD if_apc_wsp_event_handler~on_error. BREAK-POINT. WRITE / 'on_error'. ENDMETHOD. - METHOD IF_APC_WSP_EVENT_HANDLER~ON_MESSAGE. + METHOD if_apc_wsp_event_handler~on_message. DATA lv_message TYPE xstring. TRY. @@ -103,7 +102,7 @@ CLASS ZCL_OASSH IMPLEMENTATION. ENDMETHOD. - METHOD IF_APC_WSP_EVENT_HANDLER~ON_OPEN. + METHOD if_apc_wsp_event_handler~on_open. DATA lv_xstr TYPE xstring. WRITE / 'on_open'. @@ -119,7 +118,7 @@ CLASS ZCL_OASSH IMPLEMENTATION. ENDMETHOD. - METHOD SEND. + METHOD send. DATA li_message_manager TYPE REF TO if_apc_wsp_message_manager. DATA li_message TYPE REF TO if_apc_wsp_message. From 219ab73189f085c67ac928fed7d200a9d2b3096e Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 11:52:04 +0000 Subject: [PATCH 08/22] upd --- src/zcl_oassh.clas.abap | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/zcl_oassh.clas.abap b/src/zcl_oassh.clas.abap index 2367a61..100ad82 100644 --- a/src/zcl_oassh.clas.abap +++ b/src/zcl_oassh.clas.abap @@ -39,11 +39,13 @@ CLASS ZCL_OASSH IMPLEMENTATION. METHOD connect. - DATA(lo_ssh) = NEW zcl_oassh( ). + DATA lo_ssh TYPE REF TO zcl_oassh. + DATA ls_frame TYPE apc_tcp_frame. - DATA(ls_frame) = VALUE apc_tcp_frame( - frame_type = if_apc_tcp_frame_types=>co_frame_type_fixed_length - fixed_length = 1 ). + CREATE OBJECT lo_ssh. + + ls_frame-frame_type = if_apc_tcp_frame_types=>co_frame_type_fixed_length. + ls_frame-fixed_length = 1. lo_ssh->mi_client = cl_apc_tcp_client_manager=>create( i_host = iv_host From 254ff440b94e888e56cd3564b3210ad341e274dd Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 12:09:19 +0000 Subject: [PATCH 09/22] encoding and decoding --- src/zcl_oassh_stream.clas.abap | 23 +++++++++++++++++++ src/zcl_oassh_stream.clas.testclasses.abap | 26 ++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/zcl_oassh_stream.clas.abap b/src/zcl_oassh_stream.clas.abap index 5b6b831..813d38f 100644 --- a/src/zcl_oassh_stream.clas.abap +++ b/src/zcl_oassh_stream.clas.abap @@ -47,21 +47,44 @@ CLASS ZCL_OASSH_STREAM IMPLEMENTATION. METHOD name_list_decode. * https://datatracker.ietf.org/doc/html/rfc4251#section-5 + DATA lv_length TYPE i. + DATA lv_hex TYPE xstring. + DATA lv_text TYPE string. + + lv_length = uint32_decode( ). + lv_hex = mv_hex(lv_length). + lv_text = cl_abap_codepage=>convert_from( lv_hex ). + SPLIT lv_text AT ',' INTO TABLE rt_list. + mv_hex = mv_hex+lv_length. + ENDMETHOD. METHOD name_list_encode. * https://datatracker.ietf.org/doc/html/rfc4251#section-5 + DATA lv_text TYPE string. + CONCATENATE LINES OF it_list INTO lv_text SEPARATED BY ','. + + uint32_encode( strlen( lv_text ) ). + mv_hex = mv_hex && cl_abap_codepage=>convert_to( lv_text ). + ENDMETHOD. METHOD uint32_decode. + rv_int = mv_hex(4). + mv_hex = mv_hex+4. + ENDMETHOD. METHOD uint32_encode. + DATA lv_hex TYPE x LENGTH 4. + lv_hex = iv_int. + mv_hex = mv_hex && lv_hex. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_oassh_stream.clas.testclasses.abap b/src/zcl_oassh_stream.clas.testclasses.abap index eb2714d..d11132a 100644 --- a/src/zcl_oassh_stream.clas.testclasses.abap +++ b/src/zcl_oassh_stream.clas.testclasses.abap @@ -16,10 +16,36 @@ CLASS ltcl_test IMPLEMENTATION. METHOD name_list. + DATA lt_list TYPE string_table. + APPEND 'zlib' TO lt_list. + APPEND 'none' TO lt_list. + + mo_stream->name_list_encode( lt_list ). + + cl_abap_unit_assert=>assert_equals( + act = mo_stream->get( ) + exp = '000000097A6C69622C6E6F6E65' ). + + cl_abap_unit_assert=>assert_equals( + act = lines( mo_stream->name_list_decode( ) ) + exp = 2 ). + ENDMETHOD. METHOD unit32. + DATA lv_int TYPE i VALUE 699921578. + + mo_stream->uint32_encode( lv_int ). + + cl_abap_unit_assert=>assert_equals( + act = mo_stream->get( ) + exp = '29B7F4AA' ). + + cl_abap_unit_assert=>assert_equals( + act = mo_stream->uint32_decode( ) + exp = 699921578 ). + ENDMETHOD. ENDCLASS. From 90382038c7141486cf16766082045311f38a3dc9 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 12:09:48 +0000 Subject: [PATCH 10/22] pp --- src/ztest_oassh.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ztest_oassh.prog.abap b/src/ztest_oassh.prog.abap index 5faca63..157c01e 100644 --- a/src/ztest_oassh.prog.abap +++ b/src/ztest_oassh.prog.abap @@ -3,7 +3,7 @@ REPORT ztest_oassh. START-OF-SELECTION. PERFORM run. -FORM run raising cx_static_check. +FORM run RAISING cx_static_check. zcl_oassh=>connect( iv_host = 'github.com' From 5552e409561c9221d9eb0ef973ade6c8090894b5 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 12:42:48 +0000 Subject: [PATCH 11/22] update --- src/zcl_oassh_message_20.clas.abap | 46 ++++++++++++++++-------------- src/zcl_oassh_stream.clas.abap | 15 ++++++++-- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/zcl_oassh_message_20.clas.abap b/src/zcl_oassh_message_20.clas.abap index bc6892e..44a096e 100644 --- a/src/zcl_oassh_message_20.clas.abap +++ b/src/zcl_oassh_message_20.clas.abap @@ -5,27 +5,27 @@ CLASS zcl_oassh_message_20 DEFINITION PUBLIC SECTION. - TYPES: BEGIN OF ty_data, - message_id TYPE x LENGTH 1, - cookie TYPE x LENGTH 16, - kex_algorithms TYPE string_table, - server_host_key_algorithms TYPE string_table, - encryption_algorithms_c_to_s TYPE string_table, - encryption_algorithms_s_to_c TYPE string_table, - mac_algorithms_c_to_s TYPE string_table, - mac_algorithms_s_to_c TYPE string_table, - compression_algorithms_c_to_s TYPE string_table, - compression_algorithms_s_to_c TYPE string_table, - languages_c_to_s TYPE string_table, - languages_s_to_c TYPE string_table, - first_kex_packet_follows TYPE abap_bool, - reserved TYPE i, - END OF ty_data. + DATA: BEGIN OF ms_data, + message_id TYPE x LENGTH 1, + cookie TYPE x LENGTH 16, + kex_algorithms TYPE string_table, + server_host_key_algorithms TYPE string_table, + encryption_algorithms_c_to_s TYPE string_table, + encryption_algorithms_s_to_c TYPE string_table, + mac_algorithms_c_to_s TYPE string_table, + mac_algorithms_s_to_c TYPE string_table, + compression_algorithms_c_to_s TYPE string_table, + compression_algorithms_s_to_c TYPE string_table, + languages_c_to_s TYPE string_table, + languages_s_to_c TYPE string_table, + first_kex_packet_follows TYPE abap_bool, + reserved TYPE i, + END OF ms_data. METHODS get_raw RETURNING VALUE(rv_raw) TYPE xstring. METHODS set_raw IMPORTING iv_raw TYPE xstring. - METHODS get_data RETURNING VALUE(rs_data) TYPE ty_data. - METHODS set_data IMPORTING is_data TYPE ty_data. + METHODS get_data RETURNING VALUE(rs_data) LIKE ms_data. + METHODS set_data IMPORTING is_data LIKE ms_data. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. @@ -36,17 +36,21 @@ CLASS ZCL_OASSH_MESSAGE_20 IMPLEMENTATION. METHOD get_data. -* todo + rs_data = ms_data. ENDMETHOD. METHOD get_raw. -* todo + + DATA lo_stream TYPE REF TO zcl_oassh_stream. + + CREATE OBJECT lo_stream. + ENDMETHOD. METHOD set_data. -* todo + ms_data = is_data. ENDMETHOD. diff --git a/src/zcl_oassh_stream.clas.abap b/src/zcl_oassh_stream.clas.abap index 813d38f..c3b1837 100644 --- a/src/zcl_oassh_stream.clas.abap +++ b/src/zcl_oassh_stream.clas.abap @@ -10,6 +10,10 @@ CLASS zcl_oassh_stream DEFINITION METHODS get RETURNING VALUE(rv_hex) TYPE xstring. + METHODS take + IMPORTING iv_length TYPE i + RETURNING VALUE(rv_hex) TYPE xstring. + METHODS name_list_encode IMPORTING !it_list TYPE string_table. @@ -55,7 +59,7 @@ CLASS ZCL_OASSH_STREAM IMPLEMENTATION. lv_hex = mv_hex(lv_length). lv_text = cl_abap_codepage=>convert_from( lv_hex ). SPLIT lv_text AT ',' INTO TABLE rt_list. - mv_hex = mv_hex+lv_length. + take( lv_length ). ENDMETHOD. @@ -72,10 +76,15 @@ CLASS ZCL_OASSH_STREAM IMPLEMENTATION. ENDMETHOD. + METHOD take. + rv_hex = mv_hex(iv_length). + mv_hex = mv_hex+iv_length. + ENDMETHOD. + + METHOD uint32_decode. - rv_int = mv_hex(4). - mv_hex = mv_hex+4. + rv_int = take( 4 ). ENDMETHOD. From 8419f1d2140b8d1bd16d4319493ebf1528532117 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 7 Feb 2022 13:28:53 +0000 Subject: [PATCH 12/22] refactor --- src/zcl_oassh.clas.abap | 18 ++++- src/zcl_oassh_message_20.clas.abap | 103 ++++++++++++++++++----------- src/zcl_oassh_stream.clas.abap | 73 +++++++++++++++----- src/zcl_oassh_stream.clas.xml | 2 +- 4 files changed, 140 insertions(+), 56 deletions(-) diff --git a/src/zcl_oassh.clas.abap b/src/zcl_oassh.clas.abap index 100ad82..a8a3c91 100644 --- a/src/zcl_oassh.clas.abap +++ b/src/zcl_oassh.clas.abap @@ -61,6 +61,10 @@ CLASS ZCL_OASSH IMPLEMENTATION. METHOD handle. DATA lv_remote_version TYPE string. + DATA lo_stream TYPE REF TO zcl_oassh_stream. + DATA lv_padding_length TYPE i. + DATA lv_length TYPE i. + DATA ls_kexinit TYPE zcl_oassh_message_20=>ty_data. CASE mv_state. WHEN gc_state-protocol_version_exchange. @@ -72,7 +76,19 @@ CLASS ZCL_OASSH IMPLEMENTATION. WHEN gc_state-key_exchange. * todo, check buffer contains a full packet, and return the packet payload * https://datatracker.ietf.org/doc/html/rfc4253#section-7 -* name-lists of supported algorithms + + IF xstrlen( mv_buffer ) > 4. + CREATE OBJECT lo_stream EXPORTING iv_hex = mv_buffer. + lv_length = lo_stream->uint32_decode( ). + IF lo_stream->get_length( ) = lv_length. +* there is no MAC negotiated at this point in time + lv_padding_length = lo_stream->take( 1 ). + ls_kexinit = zcl_oassh_message_20=>parse( lo_stream ). + lo_stream->take( lv_padding_length ). + BREAK-POINT. + ENDIF. + ENDIF. + ENDCASE. ENDMETHOD. diff --git a/src/zcl_oassh_message_20.clas.abap b/src/zcl_oassh_message_20.clas.abap index 44a096e..5b1128a 100644 --- a/src/zcl_oassh_message_20.clas.abap +++ b/src/zcl_oassh_message_20.clas.abap @@ -5,27 +5,38 @@ CLASS zcl_oassh_message_20 DEFINITION PUBLIC SECTION. - DATA: BEGIN OF ms_data, - message_id TYPE x LENGTH 1, - cookie TYPE x LENGTH 16, - kex_algorithms TYPE string_table, - server_host_key_algorithms TYPE string_table, - encryption_algorithms_c_to_s TYPE string_table, - encryption_algorithms_s_to_c TYPE string_table, - mac_algorithms_c_to_s TYPE string_table, - mac_algorithms_s_to_c TYPE string_table, - compression_algorithms_c_to_s TYPE string_table, - compression_algorithms_s_to_c TYPE string_table, - languages_c_to_s TYPE string_table, - languages_s_to_c TYPE string_table, - first_kex_packet_follows TYPE abap_bool, - reserved TYPE i, - END OF ms_data. - - METHODS get_raw RETURNING VALUE(rv_raw) TYPE xstring. - METHODS set_raw IMPORTING iv_raw TYPE xstring. - METHODS get_data RETURNING VALUE(rs_data) LIKE ms_data. - METHODS set_data IMPORTING is_data LIKE ms_data. + TYPES: + BEGIN OF ty_data, + message_id TYPE x LENGTH 1, + cookie TYPE x LENGTH 16, + kex_algorithms TYPE string_table, + server_host_key_algorithms TYPE string_table, + encryption_algorithms_c_to_s TYPE string_table, + encryption_algorithms_s_to_c TYPE string_table, + mac_algorithms_c_to_s TYPE string_table, + mac_algorithms_s_to_c TYPE string_table, + compression_algorithms_c_to_s TYPE string_table, + compression_algorithms_s_to_c TYPE string_table, + languages_c_to_s TYPE string_table, + languages_s_to_c TYPE string_table, + first_kex_packet_follows TYPE abap_bool, + reserved TYPE i, + END OF ty_data . + + CLASS-METHODS parse + IMPORTING + !io_stream TYPE REF TO zcl_oassh_stream + RETURNING + VALUE(rs_data) TYPE ty_data . + + CLASS-METHODS serialize + IMPORTING + is_data TYPE ty_data + RETURNING + VALUE(ro_stream) TYPE REF TO zcl_oassh_stream . + + CONSTANTS gc_message_id TYPE x LENGTH 1 VALUE '14'. " is 20 in decimal + PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. @@ -35,26 +46,44 @@ ENDCLASS. CLASS ZCL_OASSH_MESSAGE_20 IMPLEMENTATION. - METHOD get_data. - rs_data = ms_data. - ENDMETHOD. - - - METHOD get_raw. - - DATA lo_stream TYPE REF TO zcl_oassh_stream. - - CREATE OBJECT lo_stream. + METHOD parse. + + rs_data-message_id = io_stream->take( 1 ). + ASSERT rs_data-message_id = gc_message_id. + rs_data-cookie = io_stream->take( 16 ). + rs_data-kex_algorithms = io_stream->name_list_decode( ). + rs_data-server_host_key_algorithms = io_stream->name_list_decode( ). + rs_data-encryption_algorithms_c_to_s = io_stream->name_list_decode( ). + rs_data-encryption_algorithms_s_to_c = io_stream->name_list_decode( ). + rs_data-mac_algorithms_c_to_s = io_stream->name_list_decode( ). + rs_data-mac_algorithms_s_to_c = io_stream->name_list_decode( ). + rs_data-compression_algorithms_c_to_s = io_stream->name_list_decode( ). + rs_data-compression_algorithms_s_to_c = io_stream->name_list_decode( ). + rs_data-languages_c_to_s = io_stream->name_list_decode( ). + rs_data-languages_s_to_c = io_stream->name_list_decode( ). + rs_data-first_kex_packet_follows = io_stream->boolean_decode( ). + rs_data-reserved = io_stream->uint32_decode( ). ENDMETHOD. - METHOD set_data. - ms_data = is_data. - ENDMETHOD. - + METHOD serialize. + + CREATE OBJECT ro_stream. + ro_stream->append( gc_message_id ). + ro_stream->append( is_data-cookie ). + ro_stream->name_list_encode( is_data-kex_algorithms ). + ro_stream->name_list_encode( is_data-server_host_key_algorithms ). + ro_stream->name_list_encode( is_data-encryption_algorithms_c_to_s ). + ro_stream->name_list_encode( is_data-encryption_algorithms_s_to_c ). + ro_stream->name_list_encode( is_data-mac_algorithms_c_to_s ). + ro_stream->name_list_encode( is_data-mac_algorithms_s_to_c ). + ro_stream->name_list_encode( is_data-compression_algorithms_c_to_s ). + ro_stream->name_list_encode( is_data-compression_algorithms_s_to_c ). + ro_stream->name_list_encode( is_data-languages_c_to_s ). + ro_stream->name_list_encode( is_data-languages_s_to_c ). + ro_stream->boolean_encode( is_data-first_kex_packet_follows ). + ro_stream->uint32_encode( is_data-reserved ). - METHOD set_raw. -* todo ENDMETHOD. ENDCLASS. diff --git a/src/zcl_oassh_stream.clas.abap b/src/zcl_oassh_stream.clas.abap index c3b1837..d3259d0 100644 --- a/src/zcl_oassh_stream.clas.abap +++ b/src/zcl_oassh_stream.clas.abap @@ -4,30 +4,42 @@ CLASS zcl_oassh_stream DEFINITION CREATE PUBLIC . PUBLIC SECTION. - METHODS constructor - IMPORTING iv_hex TYPE xstring OPTIONAL. + METHODS constructor + IMPORTING + !iv_hex TYPE xstring OPTIONAL . METHODS get - RETURNING VALUE(rv_hex) TYPE xstring. - + RETURNING + VALUE(rv_hex) TYPE xstring . METHODS take - IMPORTING iv_length TYPE i - RETURNING VALUE(rv_hex) TYPE xstring. - + IMPORTING + !iv_length TYPE i + RETURNING + VALUE(rv_hex) TYPE xstring . + METHODS append + IMPORTING + !iv_hex TYPE xsequence . METHODS name_list_encode IMPORTING - !it_list TYPE string_table. - + !it_list TYPE string_table . + METHODS boolean_encode + IMPORTING + !iv_boolean TYPE abap_bool . + METHODS boolean_decode + RETURNING + VALUE(rv_boolean) TYPE abap_bool . METHODS name_list_decode RETURNING - VALUE(rt_list) TYPE string_table. - + VALUE(rt_list) TYPE string_table . METHODS uint32_encode - IMPORTING iv_int TYPE i. - + IMPORTING + !iv_int TYPE i . METHODS uint32_decode - RETURNING VALUE(rv_int) TYPE i. - + RETURNING + VALUE(rv_int) TYPE i . + METHODS get_length + RETURNING + VALUE(rv_length) TYPE i . PROTECTED SECTION. PRIVATE SECTION. DATA mv_hex TYPE xstring. @@ -38,6 +50,28 @@ ENDCLASS. CLASS ZCL_OASSH_STREAM IMPLEMENTATION. + METHOD append. + mv_hex = mv_hex && iv_hex. + ENDMETHOD. + + + METHOD boolean_decode. + rv_boolean = boolc( take( 1 ) = '00' ) . + ENDMETHOD. + + + METHOD boolean_encode. + CASE iv_boolean. + WHEN abap_true. + append( '01' ). + WHEN abap_false. + append( '00' ). + WHEN OTHERS. + ASSERT 1 = 2. + ENDCASE. + ENDMETHOD. + + METHOD constructor. mv_hex = iv_hex. ENDMETHOD. @@ -48,6 +82,11 @@ CLASS ZCL_OASSH_STREAM IMPLEMENTATION. ENDMETHOD. + METHOD get_length. + rv_length = xstrlen( mv_hex ). + ENDMETHOD. + + METHOD name_list_decode. * https://datatracker.ietf.org/doc/html/rfc4251#section-5 @@ -71,7 +110,7 @@ CLASS ZCL_OASSH_STREAM IMPLEMENTATION. CONCATENATE LINES OF it_list INTO lv_text SEPARATED BY ','. uint32_encode( strlen( lv_text ) ). - mv_hex = mv_hex && cl_abap_codepage=>convert_to( lv_text ). + append( cl_abap_codepage=>convert_to( lv_text ) ). ENDMETHOD. @@ -93,7 +132,7 @@ CLASS ZCL_OASSH_STREAM IMPLEMENTATION. DATA lv_hex TYPE x LENGTH 4. lv_hex = iv_int. - mv_hex = mv_hex && lv_hex. + append( lv_hex ). ENDMETHOD. ENDCLASS. diff --git a/src/zcl_oassh_stream.clas.xml b/src/zcl_oassh_stream.clas.xml index ff04caf..b49d204 100644 --- a/src/zcl_oassh_stream.clas.xml +++ b/src/zcl_oassh_stream.clas.xml @@ -5,7 +5,7 @@ ZCL_OASSH_STREAM E - message + Stream 1 X X From befba52ee18abb31c03a7993f2d45eab388a2ed2 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Mon, 7 Feb 2022 14:29:28 +0100 Subject: [PATCH 13/22] Update src/zcl_oassh_message_20.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- src/zcl_oassh_message_20.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zcl_oassh_message_20.clas.abap b/src/zcl_oassh_message_20.clas.abap index 5b1128a..f5909ba 100644 --- a/src/zcl_oassh_message_20.clas.abap +++ b/src/zcl_oassh_message_20.clas.abap @@ -53,7 +53,7 @@ CLASS ZCL_OASSH_MESSAGE_20 IMPLEMENTATION. rs_data-cookie = io_stream->take( 16 ). rs_data-kex_algorithms = io_stream->name_list_decode( ). rs_data-server_host_key_algorithms = io_stream->name_list_decode( ). - rs_data-encryption_algorithms_c_to_s = io_stream->name_list_decode( ). + rs_data-encryption_algorithms_c_to_s = io_stream->name_list_decode( ). rs_data-encryption_algorithms_s_to_c = io_stream->name_list_decode( ). rs_data-mac_algorithms_c_to_s = io_stream->name_list_decode( ). rs_data-mac_algorithms_s_to_c = io_stream->name_list_decode( ). From fcf96dfaf0b1b87dbf88c274f31edc577fe8bd9e Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Mon, 7 Feb 2022 14:33:52 +0100 Subject: [PATCH 14/22] Update src/zcl_oassh_stream.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- src/zcl_oassh_stream.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zcl_oassh_stream.clas.abap b/src/zcl_oassh_stream.clas.abap index d3259d0..226d263 100644 --- a/src/zcl_oassh_stream.clas.abap +++ b/src/zcl_oassh_stream.clas.abap @@ -56,7 +56,7 @@ CLASS ZCL_OASSH_STREAM IMPLEMENTATION. METHOD boolean_decode. - rv_boolean = boolc( take( 1 ) = '00' ) . + rv_boolean = boolc( take( 1 ) = '00' ). ENDMETHOD. From 048fe926228c06d04591119ed56da6205971b938 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Mar 2022 13:36:16 +0100 Subject: [PATCH 15/22] add package --- .gitignore | 2 + abaplint.jsonc | 2 +- package-lock.json | 274 ++++++++++++++++++++++++++++++++++++++++ package.json | 25 ++++ src/zcl_oassh.clas.abap | 6 +- 5 files changed, 305 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe03b2b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +output \ No newline at end of file diff --git a/abaplint.jsonc b/abaplint.jsonc index 9087327..5839aae 100644 --- a/abaplint.jsonc +++ b/abaplint.jsonc @@ -190,7 +190,7 @@ "severity": "Error", "count": 1 }, - "line_break_style": true, + "line_break_style": false, "line_length": { "exclude": [], "severity": "Error", diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ac60bda --- /dev/null +++ b/package-lock.json @@ -0,0 +1,274 @@ +{ + "name": "open-abap-ssh", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "open-abap-ssh", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@abaplint/cli": "^2.85.32", + "@abaplint/runtime": "^1.8.11", + "@abaplint/transpiler": "^1.8.11" + } + }, + "node_modules/@abaplint/cli": { + "version": "2.85.32", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.85.32.tgz", + "integrity": "sha512-GBtpn6JGNkwBH48g1ZhARW31ZQdn4hrohcYug16NZPUwfbkDOBCZEMDWOOnQO/wfmitlaRktUEID6W+lbkTgAQ==", + "bin": { + "abaplint": "abaplint" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@abaplint/core": { + "version": "2.85.32", + "resolved": "https://registry.npmjs.org/@abaplint/core/-/core-2.85.32.tgz", + "integrity": "sha512-GtlO6+67hOA87xoWEJyKHNrs6XyTNA+JCt81KQS0FpmgsROmHsB4LzbFGgbZ/suphUhA7YdATfe/eAM19N7kbg==", + "dependencies": { + "fast-xml-parser": "^4.0.3", + "json5": "^2.2.0", + "vscode-languageserver-protocol": "^3.16.0", + "vscode-languageserver-types": "^3.16.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@abaplint/runtime": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-1.8.11.tgz", + "integrity": "sha512-c35VaQ+vNEHRQ0RBVEvgceHbnRuRlPxUtrg73y5tFT3j34K7KF8k6nOIaZqotH4gnraWcDDEfjxUCWy0tQAVzQ==", + "dependencies": { + "hdb": "^0.19.1", + "sql.js": "^1.6.2" + } + }, + "node_modules/@abaplint/transpiler": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler/-/transpiler-1.8.11.tgz", + "integrity": "sha512-ZXlCaKgg03gBiU3uzmZnphpdwF3qpT7+e5vW5IeVUdT1AbPVbKnrySBnQOL/BBgltUQvn0QCdRl7RPYeB4QEjw==", + "dependencies": { + "@abaplint/core": "^2.85.32", + "source-map": "^0.7.3" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.3.tgz", + "integrity": "sha512-xhQbg3a/EYNHwK0cxIG1nZmVkHX/0tWihamn5pU4Mhd9KEVE2ga8ZJiqEUgB2sApElvAATOdMTLjgqIpvYDUkQ==", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + }, + "node_modules/hdb": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.19.1.tgz", + "integrity": "sha512-QqB7Srj/AaesB1bZPiKZMPXnjU4NRgP7ZheCHUWf4EKKqZXpWW2lJcb6BRnNfjxfCYIT+TR1wIaA0zLO1CeU6w==", + "dependencies": { + "iconv-lite": "^0.4.18" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/sql.js": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.6.2.tgz", + "integrity": "sha512-9iucI5fXQa+Gspeqf/BNB20PxJIn5LhXDt4mjXoFPqXdR+NqtFs15SdKpSIJ6s529aGL9zFR9p2eSCIEiMsNGA==" + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + } + }, + "dependencies": { + "@abaplint/cli": { + "version": "2.85.32", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.85.32.tgz", + "integrity": "sha512-GBtpn6JGNkwBH48g1ZhARW31ZQdn4hrohcYug16NZPUwfbkDOBCZEMDWOOnQO/wfmitlaRktUEID6W+lbkTgAQ==" + }, + "@abaplint/core": { + "version": "2.85.32", + "resolved": "https://registry.npmjs.org/@abaplint/core/-/core-2.85.32.tgz", + "integrity": "sha512-GtlO6+67hOA87xoWEJyKHNrs6XyTNA+JCt81KQS0FpmgsROmHsB4LzbFGgbZ/suphUhA7YdATfe/eAM19N7kbg==", + "requires": { + "fast-xml-parser": "^4.0.3", + "json5": "^2.2.0", + "vscode-languageserver-protocol": "^3.16.0", + "vscode-languageserver-types": "^3.16.0" + } + }, + "@abaplint/runtime": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-1.8.11.tgz", + "integrity": "sha512-c35VaQ+vNEHRQ0RBVEvgceHbnRuRlPxUtrg73y5tFT3j34K7KF8k6nOIaZqotH4gnraWcDDEfjxUCWy0tQAVzQ==", + "requires": { + "hdb": "^0.19.1", + "sql.js": "^1.6.2" + } + }, + "@abaplint/transpiler": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler/-/transpiler-1.8.11.tgz", + "integrity": "sha512-ZXlCaKgg03gBiU3uzmZnphpdwF3qpT7+e5vW5IeVUdT1AbPVbKnrySBnQOL/BBgltUQvn0QCdRl7RPYeB4QEjw==", + "requires": { + "@abaplint/core": "^2.85.32", + "source-map": "^0.7.3" + } + }, + "fast-xml-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.3.tgz", + "integrity": "sha512-xhQbg3a/EYNHwK0cxIG1nZmVkHX/0tWihamn5pU4Mhd9KEVE2ga8ZJiqEUgB2sApElvAATOdMTLjgqIpvYDUkQ==", + "requires": { + "strnum": "^1.0.5" + } + }, + "hdb": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.19.1.tgz", + "integrity": "sha512-QqB7Srj/AaesB1bZPiKZMPXnjU4NRgP7ZheCHUWf4EKKqZXpWW2lJcb6BRnNfjxfCYIT+TR1wIaA0zLO1CeU6w==", + "requires": { + "iconv-lite": "^0.4.18" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "sql.js": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.6.2.tgz", + "integrity": "sha512-9iucI5fXQa+Gspeqf/BNB20PxJIn5LhXDt4mjXoFPqXdR+NqtFs15SdKpSIJ6s529aGL9zFR9p2eSCIEiMsNGA==" + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..82101ed --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "open-abap-ssh", + "version": "1.0.0", + "private": true, + "description": "open-abap-ssh", + "scripts": { + "test": "npx abaplint && npm run unit", + "unit": "rm -rf output && abap_transpile test/abap_transpile.json && echo RUNNING && node output/index.mjs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/open-abap/open-abap-ssh.git" + }, + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/open-abap/open-abap-ssh/issues" + }, + "homepage": "https://github.com/open-abap/open-abap-ssh#readme", + "dependencies": { + "@abaplint/cli": "^2.85.32", + "@abaplint/runtime": "^1.8.11", + "@abaplint/transpiler": "^1.8.11" + } +} diff --git a/src/zcl_oassh.clas.abap b/src/zcl_oassh.clas.abap index a8a3c91..9d0f9be 100644 --- a/src/zcl_oassh.clas.abap +++ b/src/zcl_oassh.clas.abap @@ -34,7 +34,7 @@ ENDCLASS. -CLASS ZCL_OASSH IMPLEMENTATION. +CLASS zcl_oassh IMPLEMENTATION. METHOD connect. @@ -147,7 +147,7 @@ CLASS ZCL_OASSH IMPLEMENTATION. li_message = li_message_manager->create_message( ). - ASSERT NOT iv_message IS INITIAL. + ASSERT iv_message IS NOT INITIAL. DO xstrlen( iv_message ) TIMES. lv_index = sy-index - 1. @@ -157,4 +157,4 @@ CLASS ZCL_OASSH IMPLEMENTATION. ENDDO. ENDMETHOD. -ENDCLASS. +ENDCLASS. \ No newline at end of file From 50ed7b5848f3c8f090b685612ef4ec02c3480ca3 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Mar 2022 14:37:26 +0100 Subject: [PATCH 16/22] remove breakpoints --- src/zcl_oassh.clas.abap | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/zcl_oassh.clas.abap b/src/zcl_oassh.clas.abap index 9d0f9be..982228f 100644 --- a/src/zcl_oassh.clas.abap +++ b/src/zcl_oassh.clas.abap @@ -85,7 +85,6 @@ CLASS zcl_oassh IMPLEMENTATION. lv_padding_length = lo_stream->take( 1 ). ls_kexinit = zcl_oassh_message_20=>parse( lo_stream ). lo_stream->take( lv_padding_length ). - BREAK-POINT. ENDIF. ENDIF. @@ -95,13 +94,11 @@ CLASS zcl_oassh IMPLEMENTATION. METHOD if_apc_wsp_event_handler~on_close. - BREAK-POINT. WRITE / 'on_close'. ENDMETHOD. METHOD if_apc_wsp_event_handler~on_error. - BREAK-POINT. WRITE / 'on_error'. ENDMETHOD. From d97fd9ffd25b3f017890a412ff174f290ec3139b Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Mar 2022 14:42:03 +0100 Subject: [PATCH 17/22] catch --- src/zcl_oassh.clas.abap | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/zcl_oassh.clas.abap b/src/zcl_oassh.clas.abap index 982228f..433afc1 100644 --- a/src/zcl_oassh.clas.abap +++ b/src/zcl_oassh.clas.abap @@ -126,7 +126,11 @@ CLASS zcl_oassh IMPLEMENTATION. lv_xstr = cl_abap_codepage=>convert_to( 'SSH-2.0-abap' && cl_abap_char_utilities=>cr_lf ). - send( lv_xstr ). + TRY. + send( lv_xstr ). + CATCH cx_apc_error. + ASSERT 1 = 2. + ENDTRY. mv_state = gc_state-protocol_version_exchange. From 6c5e140288d9f093ddcdb7cc245b1b495220980b Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Mar 2022 14:45:09 +0100 Subject: [PATCH 18/22] fix transpile --- abap_transpile.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 abap_transpile.json diff --git a/abap_transpile.json b/abap_transpile.json new file mode 100644 index 0000000..ba856a4 --- /dev/null +++ b/abap_transpile.json @@ -0,0 +1,19 @@ +{ + "input_folder": "src", + "input_filter": [], + "output_folder": "output", + "libs": [ + { + "url": "https://github.com/open-abap/open-abap" + } + ], + "write_unit_tests": true, + "write_source_map": true, + "options": { + "ignoreSyntaxCheck": false, + "addFilenames": true, + "addCommonJS": true, + "unknownTypes": "runtimeError", + "skip": [] + } +} \ No newline at end of file From b76db35a6cb3f9302bfa99dbed7485b74e641893 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Mar 2022 14:49:47 +0100 Subject: [PATCH 19/22] add actions --- .github/workflows/test.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..823791d --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,18 @@ +name: test + +on: + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '16' + - name: npm install + run: npm ci + - name: npm test + run: npm test \ No newline at end of file From feb7bfc20beeb6b3e916d5c0c13cd27e7972df91 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Mar 2022 14:51:12 +0100 Subject: [PATCH 20/22] use cli --- package-lock.json | 165 +++------------------------------------------- package.json | 2 +- 2 files changed, 9 insertions(+), 158 deletions(-) diff --git a/package-lock.json b/package-lock.json index ac60bda..343414c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@abaplint/cli": "^2.85.32", "@abaplint/runtime": "^1.8.11", - "@abaplint/transpiler": "^1.8.11" + "@abaplint/transpiler-cli": "^1.8.11" } }, "node_modules/@abaplint/cli": { @@ -25,20 +25,6 @@ "node": ">=12.0.0" } }, - "node_modules/@abaplint/core": { - "version": "2.85.32", - "resolved": "https://registry.npmjs.org/@abaplint/core/-/core-2.85.32.tgz", - "integrity": "sha512-GtlO6+67hOA87xoWEJyKHNrs6XyTNA+JCt81KQS0FpmgsROmHsB4LzbFGgbZ/suphUhA7YdATfe/eAM19N7kbg==", - "dependencies": { - "fast-xml-parser": "^4.0.3", - "json5": "^2.2.0", - "vscode-languageserver-protocol": "^3.16.0", - "vscode-languageserver-types": "^3.16.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@abaplint/runtime": { "version": "1.8.11", "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-1.8.11.tgz", @@ -48,28 +34,12 @@ "sql.js": "^1.6.2" } }, - "node_modules/@abaplint/transpiler": { + "node_modules/@abaplint/transpiler-cli": { "version": "1.8.11", - "resolved": "https://registry.npmjs.org/@abaplint/transpiler/-/transpiler-1.8.11.tgz", - "integrity": "sha512-ZXlCaKgg03gBiU3uzmZnphpdwF3qpT7+e5vW5IeVUdT1AbPVbKnrySBnQOL/BBgltUQvn0QCdRl7RPYeB4QEjw==", - "dependencies": { - "@abaplint/core": "^2.85.32", - "source-map": "^0.7.3" - } - }, - "node_modules/fast-xml-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.3.tgz", - "integrity": "sha512-xhQbg3a/EYNHwK0cxIG1nZmVkHX/0tWihamn5pU4Mhd9KEVE2ga8ZJiqEUgB2sApElvAATOdMTLjgqIpvYDUkQ==", - "dependencies": { - "strnum": "^1.0.5" - }, + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-1.8.11.tgz", + "integrity": "sha512-JlENFEvzRraJxEPYKMXPgLZX/clH5hSGFyttKMPGUREX7qg6OS99lMSGCKF2TisyS0GAW38N+jIcs2dVTYn5jw==", "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" + "abap_transpile": "abap_transpile" } }, "node_modules/hdb": { @@ -94,69 +64,15 @@ "node": ">=0.10.0" } }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, "node_modules/sql.js": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.6.2.tgz", "integrity": "sha512-9iucI5fXQa+Gspeqf/BNB20PxJIn5LhXDt4mjXoFPqXdR+NqtFs15SdKpSIJ6s529aGL9zFR9p2eSCIEiMsNGA==" - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" } }, "dependencies": { @@ -165,17 +81,6 @@ "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.85.32.tgz", "integrity": "sha512-GBtpn6JGNkwBH48g1ZhARW31ZQdn4hrohcYug16NZPUwfbkDOBCZEMDWOOnQO/wfmitlaRktUEID6W+lbkTgAQ==" }, - "@abaplint/core": { - "version": "2.85.32", - "resolved": "https://registry.npmjs.org/@abaplint/core/-/core-2.85.32.tgz", - "integrity": "sha512-GtlO6+67hOA87xoWEJyKHNrs6XyTNA+JCt81KQS0FpmgsROmHsB4LzbFGgbZ/suphUhA7YdATfe/eAM19N7kbg==", - "requires": { - "fast-xml-parser": "^4.0.3", - "json5": "^2.2.0", - "vscode-languageserver-protocol": "^3.16.0", - "vscode-languageserver-types": "^3.16.0" - } - }, "@abaplint/runtime": { "version": "1.8.11", "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-1.8.11.tgz", @@ -185,22 +90,10 @@ "sql.js": "^1.6.2" } }, - "@abaplint/transpiler": { + "@abaplint/transpiler-cli": { "version": "1.8.11", - "resolved": "https://registry.npmjs.org/@abaplint/transpiler/-/transpiler-1.8.11.tgz", - "integrity": "sha512-ZXlCaKgg03gBiU3uzmZnphpdwF3qpT7+e5vW5IeVUdT1AbPVbKnrySBnQOL/BBgltUQvn0QCdRl7RPYeB4QEjw==", - "requires": { - "@abaplint/core": "^2.85.32", - "source-map": "^0.7.3" - } - }, - "fast-xml-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.3.tgz", - "integrity": "sha512-xhQbg3a/EYNHwK0cxIG1nZmVkHX/0tWihamn5pU4Mhd9KEVE2ga8ZJiqEUgB2sApElvAATOdMTLjgqIpvYDUkQ==", - "requires": { - "strnum": "^1.0.5" - } + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-1.8.11.tgz", + "integrity": "sha512-JlENFEvzRraJxEPYKMXPgLZX/clH5hSGFyttKMPGUREX7qg6OS99lMSGCKF2TisyS0GAW38N+jIcs2dVTYn5jw==" }, "hdb": { "version": "0.19.1", @@ -218,57 +111,15 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - }, "sql.js": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.6.2.tgz", "integrity": "sha512-9iucI5fXQa+Gspeqf/BNB20PxJIn5LhXDt4mjXoFPqXdR+NqtFs15SdKpSIJ6s529aGL9zFR9p2eSCIEiMsNGA==" - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" } } } diff --git a/package.json b/package.json index 82101ed..bae75e4 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,6 @@ "dependencies": { "@abaplint/cli": "^2.85.32", "@abaplint/runtime": "^1.8.11", - "@abaplint/transpiler": "^1.8.11" + "@abaplint/transpiler-cli": "^1.8.11" } } From f88e19eedc30e19b8332898ef1f47cd6976f6409 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Mar 2022 14:53:11 +0100 Subject: [PATCH 21/22] check full syntax --- abaplint.jsonc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/abaplint.jsonc b/abaplint.jsonc index 5839aae..70597ea 100644 --- a/abaplint.jsonc +++ b/abaplint.jsonc @@ -5,13 +5,12 @@ "dependencies": [ { "url": "https://github.com/open-abap/open-abap", - "folder": "/open", "files": "/src/**/*.*" } ], "syntax": { "version": "open-abap", - "errorNamespace": "^(Z|Y|LCL_|TY_|LIF_)" + "errorNamespace": "." }, "rules": { "7bit_ascii": true, From 4e0b56e08d5cf0ca2abe5c81a1449646c6b223e1 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Mar 2022 14:55:02 +0100 Subject: [PATCH 22/22] fix type --- src/zcl_oassh.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zcl_oassh.clas.abap b/src/zcl_oassh.clas.abap index 433afc1..d58e844 100644 --- a/src/zcl_oassh.clas.abap +++ b/src/zcl_oassh.clas.abap @@ -40,7 +40,7 @@ CLASS zcl_oassh IMPLEMENTATION. METHOD connect. DATA lo_ssh TYPE REF TO zcl_oassh. - DATA ls_frame TYPE apc_tcp_frame. + DATA ls_frame TYPE if_abap_channel_types=>ty_apc_tcp_frame. CREATE OBJECT lo_ssh.