52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| //  SPDX-License-Identifier: LGPL-2.1-or-later
 | |
| //  Copyright (c) 2015-2024 MariaDB Corporation Ab
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| const Command = require('./command');
 | |
| const ServerStatus = require('../const/server-status');
 | |
| 
 | |
| const PING_COMMAND = new Uint8Array([1, 0, 0, 0, 0x0e]);
 | |
| 
 | |
| /**
 | |
|  * send a COM_PING: permits sending a packet containing one byte to check that the connection is active.
 | |
|  * see https://mariadb.com/kb/en/library/com_ping/
 | |
|  */
 | |
| class Ping extends Command {
 | |
|   constructor(cmdParam, resolve, reject) {
 | |
|     super(cmdParam, resolve, reject);
 | |
|   }
 | |
| 
 | |
|   start(out, opts, info) {
 | |
|     if (opts.logger.query) opts.logger.query('PING');
 | |
|     this.onPacketReceive = this.readPingResponsePacket;
 | |
|     out.fastFlush(this, PING_COMMAND);
 | |
|     this.emit('send_end');
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Read ping response packet.
 | |
|    * packet can be :
 | |
|    * - an ERR_Packet
 | |
|    * - an OK_Packet
 | |
|    *
 | |
|    * @param packet  query response
 | |
|    * @param out     output writer
 | |
|    * @param opts    connection options
 | |
|    * @param info    connection info
 | |
|    */
 | |
|   readPingResponsePacket(packet, out, opts, info) {
 | |
|     packet.skip(1); //skip header
 | |
|     packet.skipLengthCodedNumber(); //affected rows
 | |
|     packet.skipLengthCodedNumber(); //insert ids
 | |
|     info.status = packet.readUInt16();
 | |
|     if (info.redirectRequest && (info.status & ServerStatus.STATUS_IN_TRANS) === 0) {
 | |
|       info.redirect(info.redirectRequest, this.successEnd.bind(this, null));
 | |
|     } else {
 | |
|       this.successEnd(null);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = Ping;
 |